今天要繼續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代碼如下:
代碼很簡單,隻是定義瞭一個上傳控件,註意這個name對應的值‘file’是$_FILES獲得前臺文件的依據,若後臺獲得文件類型寫成$_FILES[‘myFile’][‘type’],說明前臺的name對應的值一定要為’myFile’,不然會報Invalid file的錯誤。最後看一下後臺的代碼:
<?php $allowedExts = array("gif", "jpeg", "jpg", "png"); /* * explode(separator,string,limit) 參數 描述 separator 必需。規定在哪裡分割字符串。 string 必需。要分割的字符串。 limit 可選。規定所返回的數組元素的最大數目。 */ $temp = explode(".", $_FILES["file"]["name"]); //end() 函數將數組內部指針指向最後一個元素,並返回該元素的值(如果成功)。 $extension = end($temp); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] 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()函數將它復制到其它位置,此時,才算完成瞭上傳文件過程。
最後,如果需要的話還是可以下載一下源碼的,雖然很簡單。