天天看點

關于PHP上傳檔案時配置 php.ini 中的 upload_tmp_dir

在《PHP 5.3 入門經典》9.6.3 的試一試中(P235),給出了一個上傳檔案的例子,這裡的檔案格式為jpeg圖檔(image/jpeg)。如果之前未配置 php.ini 中的 upload_tmp_dir 參數,則會出現上傳失敗的提示資訊。看如下代碼片段

if(isset($_FILES["photo"])) and $_FILES["photo"]["error"] == UPLOAD_ERR_OK)      

該判斷語句中的條件如果為真,則繼續。而此時 $_FILES["photo"]["error"] 值為6,UPLOAD_ERR_OK值為0(表示上傳成功)。

下面列出 $_FILES["photo"]["error"] 不同值所代表含義:

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

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

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

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

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

其值為 6,找不到臨時檔案夾。php 4.3.10 和 PHP 5.0.3 引進。

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

即找不到臨時檔案夾,一般來說是因為配置php.int中的 upload_tim_dir 或者其值配置不正确。

網上例子一般推薦 upload_tim_dir = "C:\Windows\Temp",實際上因為安全/權限等方面原因,依然會報錯(6)。

故作者修改其路徑為其它,比如 upload_tim_dir = "C:\temp",此時程式即可正常運作。有些部落客提及需要将 "C:\temp" 檔案夾 Users 組/使用者 添加“寫入”權限。而作者測試時發現不修改也可以,可能與機器/作業系統環境有關。

tips:upload_tim_dir = "C:\Windows\Temp" 中路徑字元串将 "\" 替換為 "/" 或兩者混用沒有任何影響。(PHP 7.1.6)