<?
$fn = $_FILES[test][name];
$temp = $_FILES[test][tmp_name];
$path = "/var/www/html/dl/a/";
copy($temp, $path.$fn);
?>
接著只要在網頁上建立這樣的標籤內容:
<form action="/dl/up.php" method="post" enctype="multipart/form-data">
<input type="file" name="test">
<input type="submit" value="submit">
</form>
一個簡單的 http file upload 模型就建起來了。
不過這樣的模式只適合有使用瀏覽器,有 GUI 的介面的使用者。今天如果是利用 wget 在 console 底下定時上傳檔案備份之類的行為,這樣就不適用 web 開上傳。
我們查看 wget 的 manpage 裡,可以查得到 --post-file 這個給 file upload 的參數,在實做上面,只需要加上 mime-type 的標頭就可以讓 server page 知道今天是要做 file upload 的行為,這個指令會像是:
wget http://192.168.1.128/dl/up.php --post-file=post.data --header="Content-Type: multipart/form-data; boundary=FILEUPLOAD" -O /dev/null --http-user=admin --http-password=test1234
post.data 在 manpage 裡面有說明到,其實 post data 就是 cgi post 處理時從 stdin 讀進來的資料,就長這樣:
--FILEUPLOAD
Content-Disposition: form-data; name="test"; filename="1.txt"
Content-Type: text/plain
12345
--FILEUPLOAD--
其中 boundry 的部份在 wget 送標頭的時候也要加上,這樣 server page 才會知道從哪邊開始讀。
沒有留言:
張貼留言