PHP 超全域性變數之$_FILES詳解

2020-07-16 10:06:12

$_FILES——通過 HTTP POST 方式上傳到當前指令碼的專案的陣列。

假設我們上傳檔案欄位name='userfile',$_FILES陣列裡包括:

$_FILES['userfile']['name']      //用戶端機器檔案的原名稱。
$_FILES['userfile']['type']     //檔案的 MIME 型別,如果瀏覽器提供此資訊的話。一個例子是「image/gif」。不過此 MIME 型別在 PHP 端並不檢查,因此不要想當然認為有這個值。
$_FILES['userfile']['size']     //已上傳檔案的大小,單位為位元組。
$_FILES['userfile']['tmp_name']   //檔案被上傳後在伺服器端儲存的臨時檔名。
$_FILES['userfile']['error']      //和該檔案上傳相關的錯誤程式碼。此專案是在 PHP 4.2.0 版本中增加的。
/**

錯誤碼有:

UPLOAD_ERR_OK

其值為 0,沒有錯誤發生,檔案上傳成功。

UPLOAD_ERR_INI_SIZE

其值為 1,上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。

UPLOAD_ERR_FORM_SIZE

其值為 2,上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。

eg,在表單中新增隱藏域:value值單位是位元組

<form enctype="multipart/form-data" action="test.php" method="POST">
  <!-- MAX_FILE_SIZE must precede the file input field -->
  <input type="hidden" name="MAX_FILE_SIZE" value="12" />
  <!-- Name of input element determines name in $_FILES array -->
  Send this file: <input name="userfile" type="file" />
  <input type="submit" value="Send File" />
</form>

UPLOAD_ERR_PARTIAL

其值為 3,檔案只有部分被上傳。

UPLOAD_ERR_NO_FILE

其值為 4,沒有檔案被上傳。

UPLOAD_ERR_NO_TMP_DIR

其值為 6,找不到臨時資料夾。PHP 4.3.10 和 PHP 5.0.3 引進。

UPLOAD_ERR_CANT_WRITE

其值為 7,檔案寫入失敗。PHP 5.1.0 引進。

檔案被上傳後,預設地會被儲存到伺服器端的預設臨時目錄中,除非 php.ini 中的 upload_tmp_dir設定為其它的路徑。伺服器端的預設臨時目錄可以通過更改PHP執行環境的環境變數TMPDIR來重新設定,但是在PHP指令碼內部通過執行 putenv() 函數來設定是不起作用的。該環境變數也可以用來確認其它的操作也是在上傳的檔案上進行的。

檔案上傳可能用到的其他函數:

is_uploaded_file:

is_uploaded_file — 判斷檔案是否是通過 HTTP POST 上傳的
is_uploaded_file ( string $filename ) : bool

引數:filename——要檢查的檔名。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE。

如果 filename 所給出的檔案是通過 HTTP POST 上傳的則返回 TRUE。這可以用來確保惡意的使用者無法欺騙指令碼去存取本不能存取的檔案,例如 /etc/passwd。

move_uploaded_file:

move_uploaded_file — 將上傳的檔案移動到新位置
move_uploaded_file ( string $filename , string $destination ) : bool

引數:filename 上傳的檔案的檔名;destination 移動檔案到這個位置(絕對路徑)

本函數檢查並確保由 filename 指定的檔案是合法的上傳檔案(即通過 PHP 的 HTTP POST 上傳機制所上傳的)。如果檔案合法,則將其移動為由 destination 指定的檔案。

以上就是PHP 超全域性變數之$_FILES詳解的詳細內容,更多請關注TW511.COM其它相關文章!