<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
首先來看下上傳部分的表單代碼: javascript
這裏有幾個要注意的地方,首先看這句<form method="post" action="upload.php" enctype="multipart/form-data">,這裏咱們採用POST方法,個別瀏覽器還支持PUT方法,固然這須要對腳本進行修改,我並不建議這麼作。表單中必須設置enctype="multipart/form-data,這樣,服務器就知道上傳文件帶有常規表單信息,記住,這個是必須設置的。此外還須要一個隱藏域來限制上傳文件的最大長度:<input type="hidden" name="MAX_FILE_SIZE" value="2000000">,這裏name必須設置成MAX_FILE_SIZE,其值就是上傳文件的最大長度,單位是B,這裏我限制成2M。再看這句:<input name="file" type="file" value="瀏覽" >,type="file"說明了文件類型,這樣一個基本的上傳文件接口就完成了,接下來說講如何用PHP來處理上傳的文件,此外你的php.ini中設置的上傳文件最大長度可能會影響到你的實際上傳,請根據實際狀況修改,另PHP的上傳是先傳到臨時目錄,在移至指定目錄的,了;臨時目錄的可根據須要修改,也可以使用默認值。
好的,表單提交upload.php,來看看這個頁面都有什麼:
PHP代碼以下: php
剛看這些你可能有點暈~~,不過沒關係,聽我講完,你就會發現其實這玩意SO EASY!!首先我講下原理,該程序以上傳圖片爲例,先判斷文件類型是否爲圖片格式,如果則上傳文件,以隨機數和時間的組合從新命名文件(避免上傳文件重名,這樣作頗有必要!),接着上傳文件到指定目錄,成功上傳則輸出上傳的圖片預覽。這裏要對程序中一些函數做些解釋。先看return substr(strrchr($filename, '.'), 1), strrchar()函數有什麼做用呢,我舉個例子你們就知道,好比一個圖片文件 pic.jpg,咱們用 strrchr處理,strrchr(pic.jpg,'.'),它將返回.jpg,明白了嗎?該函數返回指定字符在該字符串最後出現的位置後的字符。配合 substr() 咱們就能夠取到jpg,這樣咱們就獲得了文件的後綴名,來判斷上傳文件是否符合指定格式。本程序把指定的格式放在一個數組中,實際使用時可根據須要添加。
接下來看產生隨機數文件名部分, 咱們看到mt_srand()這個函數,手冊上叫他「播下一個更好的隨機數發生器種子」,其實就是初始化一個隨機數的函數,參數是(double)microtime() * 1000000,這裏若是不這是參數就會自動設置個隨機數,固然這不符合咱們的須要,如此一來,隨機數就具有必定的長度,保證了上傳文件不重名。接着,咱們調用判斷文件類型的函數,並將其轉化爲小寫strtolower(fileext($_FILES['file']['name'])),這裏有個很關鍵的東東$_FILES ,這是個超級全局數組,保存了須要處理的表單數據,若是開啓了register_globals,也能夠直接訪問,但這是不安全的。看剛纔那個上傳接口<input name="file" type="file" value="瀏覽" >,根據這個表單名稱,咱們能夠獲得不少信息:
$_FILES['file']['name']-- 獲得文件名稱
$_FILES['file']['tmp_name']--獲得臨時存儲位置
$_FILES['file']['size']--獲得文件大小
$_FILES['file']['type']--獲得文件MIME類型
獲得這些信息,咱們就能夠輕鬆判斷文件的信息了,是否是很方便?^_^,接下來還有一些函數須要瞭解,file_exists()--判斷指定目錄是否存在,不存在咱們固然不能上傳(好像是廢話!),move_uploaded_file--將上傳文件移至指定目錄,is_uploaded_file--判斷文件是否已經經過HTTP POST上傳。成功上傳,咱們就輸出預覽,不然輸出上傳失敗!大功告成
你們可根據這個進行擴展,好比配合JS實現多文件上傳,如DZ的上傳效果,再深一點結合AJAX實現無刷新上傳,不少博客都有采用,最後播放下下兩篇原創文章的預告
1 我將把這個例子擴展,增長後臺和數據庫部分,實現上傳文件管理,審覈,將發佈在原創區。
2 利用目錄函數實現文件管理,將發佈在新手區
但願感興趣的朋友屆時觀看~~~,謝謝!!!!!!java