網路廣告,變成了 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' action='next.php' method=post > 您的大名: < input type=text name=user >< br > 档案名称: < input name='myfile' type='file' >< br > < input type='submit' value='送出' > < /form >
在form 的標籤中,要參加enctype='multipart/form-data' 的字符串,表現應用者輸進的材料上有檔案,同時method 必須上傳POST 而不能用GET。
在上面的碼中,若應用者姓名填進 Wilson Peng,並選 c:myphoto.gif 的檔案,在應用者按下送出鍵後,瀏覽器則傳送出下面的 POST 資料。
Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-disposition: form-data; name='user' Wilson Peng --AaB03x content-disposition: form-data; name='myfile' Content-type: multipart/mixed, boundary=BbC04y --BbC04y Content-disposition: attachment; filename='myphoto.gif' Content-type: image/gif Content-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 程式要做的最重要動作,就是好好應用這四個變數,否則程式要做的應用者上傳的檔案就消散了。因此,要先將$myfile 複製到存放廣告圖的目錄中
copy($banner,'/home1/biglobe3/ad/'.$banner_name);
這行程序就是將檔案存在/home/htdocs/ad 的目錄中,就上面的例子而言,就將檔案存到/home/ htdocs/ad/myphoto.gif。重要的是,存放的目錄不能是 Web Server 無法閱讀的目錄,而應放在網站的 Homepage 所在目錄中,才可以在網路上看到。