广告
网络广告,变成了 Internet 上的热门学问。而 468x60 更变成了广告人员绞尽脑汁的尺寸。
在处理广告时,若能直接使用浏览器将广告的 468x60 图文件送到处理广告的服务器中,相信是件很舒服的事,不用再开 FTP 程序,搞大半天只为了 upload。
这个问题,是所有 Web CGI 程序的痛,包括 ASP、Prel....等等,都需要再经过系统元件的增加才能达成。号称最强的 Web CGI 程序: PHP,在这方面的表现没有令人失望,甚至傲视其它的 CGI 工具。
File Upload 功能在 RFC 1867 文件有有详细的说明,是利用特殊的文件格式 (content-type) multipart/form-data。值得注意的是浏览器一定要用 Netscape 3.0 以上或 MS Internet Explorer 4.0 以上的版本才能将文件上传。
先看下面的 HTML 源代码
在 form 的标签中,要加入 enctype="multipart/form-data" 的字符串,表示用户输入的资料上有文件上传,同时 method 一定要用 POST 而不能用 GET。
在上面的码中,若用户姓名填入 Wilson Peng,并选 c:\myphoto.gif 的文件,在用户按下送出键后,浏览器则传送出下面的 POST 资料。
Content-type: multipart/form-data, boundary=AaB03x--AaB03xcontent-disposition: form-data; name="user"Wilson Peng--AaB03xcontent-disposition: form-data; name="myfile"Content-type: multipart/mixed, boundary=BbC04y--BbC04yContent-disposition: attachment; filename="myphoto.gif"Content-type: image/gifContent-Transfer-Encoding: binary ...myphoto.gif 内容略...--BbC04y----AaB03x--
看到上面的资料中,boundary=AaB03x 即为分开不同字段资料的信息,其中的 AaB03x 编码方法,视浏览器的版本不同而异,通常是浏览器哈稀产生的。之后就可以看到用 --AaB03x 来隔开不同的字段。
以上面为例,处理 form 的 action 程序 next.php,会主动产生四个变量,见下表
变量名 | 说明 |
---|---|
$myfile | 即上传的文件内容 |
$myfile_name | 上传文件在用户端的名称 |
$myfile_size | 上传文件的大小 |
$myfile_type | 上传文件的格式,如 "image/gif" |
next.php プログラムで実行する最も重要な手順は、これら 4 つの変数をうまく活用することです。そうしないと、ユーザーがアップロードしたファイルはプログラムが終了するとすぐに消えてしまいます。したがって、まず $myfile を広告画像が保存されているディレクトリにコピーする必要があります
copy($banner,"/home1/biglobe3/ad/".$banner_name) );
このプログラム行は、ファイルをディレクトリ /home/htdocs/ad に保存します。重要なことは、保存するディレクトリは Web サーバーから読み取れないディレクトリであってはならず、ネットワーク上で参照できるように、Web サイトのホームページが配置されているディレクトリに配置する必要があるということです。
おそらく、取得したファイル サイズがシステムによって報告されたサイズと同じであるかどうかの比較など、プログラムでより詳細な処理が必要な場合は、$myfile_size 変数を使用できます。
フォームに設定された入力ファイルの名前が変更されると、アップロード内の変数も変更されます。
その後、変数は次のように変更されます。 $upfile、$upfile_name、$upfile_size、および $upfile_type。
したがって、次の例では、ファイル アップロードと Oracle 7.x バックエンド データベースを使用してファイルを Web ホームページ ディレクトリに配置し、関連情報が Oracle に保存されます。もちろん、ユーザー認証を使用すると、アカウントを持つユーザーのみが写真をアップロードできるため、クラッカーによるわいせつな広告や不適切な広告のアップロードを防ぐことができます。例のデータベース構成は、5.4 掲示板の構成と同じです。
// adadd.php if (($banner==" " )そして ($url=="")) { ?> 重み付けされた値の数値が大きいほど、画像が表示される確率が高くなります。デフォルト値は 1 です。 } else { if ( file_exists("/home /htdocs) /ad/". $banner_name)) { Commonheader ( "file" ファイル ". $banner_name." は既に存在します " ); echo "
" |