今天要繼續php9個超全域變數的系列,今天說一說$_FILE的用法.
首先呢,類似與$_POST等, $_FILES適用於上傳檔案類的input標籤,$_FIFLES類似於一個二維數組,可以得到並儲存用戶端上傳的檔案的各種資訊,具體如下:
$_FILES['myFile']['name'] 用戶端檔案的原名稱。
$_FILES['myFile']['type'] 檔案的 MIME 類型,需要瀏覽器提供該資訊的支援,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳檔案的大小,單位為位元組。
$_FILES['myFile']['tmp_name'] 檔案被上傳後在服務端儲存的臨時檔案名稱,一般是系統預設。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設定是不起作用的。
$_FILES['myFile']['error'] 和該檔案上傳相關的錯誤碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
所以,通過上面的這寫變數便可以用於幕後處理使用者上傳的檔案了,例如只能上傳圖片類的,則可以通過$_FILES['myFile']['type']來限制,限制大小則可以通過$_FILES['myFile']['size'] 來指定,接下來,我以w3school上的例子來解釋$_FILES的具體用法。
該demo主要實現的功能是上傳圖片類的檔案並儲存在伺服器端的相關目錄下。
html代碼如下:
Filename:
代碼很簡單,只是定義了一個上傳控制項,注意這個name對應的值‘file’是$_FILES獲得前台檔案的依據,若後台獲得檔案類型寫成$_FILES['myFile']['type'],說明前台的name對應的值一定要為'myFile',不然會報Invalid file的錯誤。最後看一下背景代碼:
0){echo "Return Code: " . $_FILES["file"]["error"] . "
";}else{echo "Upload: " . $_FILES["file"]["name"] . "
";echo "Type: " . $_FILES["file"]["type"] . "
";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB
";echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
";if (file_exists("upload/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " already exists. ";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);echo "Stored in: " . "upload/" . $_FILES["file"]["name"];}}}else{echo "Invalid file";}?>
裡面主要用到了explode(),end(),和in_array()三個主要函數,其用法我都做了注釋解釋,都很好理解,你看,用php實現上傳一個檔案是多麼的簡單,需要注意的一點是:檔案被上傳結束後,預設地被儲存在了臨時目錄中,這個目錄可以通過$_FILES['myFile']['tmp_name'] 來訪問,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。也就是不管是否上傳成功,指令碼執行完後臨時目錄裡的檔案肯定會被刪除。所以本例當中用move_uploaded_files()函數將它複製到其它位置,此時,才算完成了上傳檔案過程。
最後,如果需要的話還是可以下載一下源碼的,雖然很簡單。