在《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)