php上传文件损坏,PHP 上传文件故障排除
PHP 文件上傳時出現問題時,就要在表單、后臺處理程序和服務器配置上找原因。最常見的故障原因有:PHP 配置不正確、服務器上的相關目錄沒有寫權限、表單編寫有問題等。
如果在使用 PHP 上傳時遇到問題,請參閱以下故障排除步驟:
檢查表單
檢查 method、enctype、MAX_FILE_SIZE 等是否正確,各表單項的 name 屬性是否正確,另外
標簽必須關閉,也不可以在任何時候用 JavaScript 禁用文件表單域。檢查服務器上的目錄權限
確保服務器上的上傳文件保存目錄、上傳臨時目錄(upload_tmp_dir)都有讀寫權限。而且服務器的磁盤空間充足。
對于 Windows,權限的問題有時會比較討厭,需要這樣設置:
上傳臨時文件目錄(upload_tmp_dir):應用程序池對應用戶擁有其修改權限;IUSR(Internet 來賓帳號)擁有其父目錄的列出文件夾內容權限。
所以,一個比較方便的策略是,在任意一個地方建立一個 tmp 文件夾,為其設置 IUSR 的列出文件夾內容權限和應用程序池對應用戶的修改權限;然后在其下建立一個 upload 文件夾,任其繼承 tmp 的權限。最后,將 session.save_path 設在 tmp,upload_tmp_dir 設在 upload。
如果由于權限問題,PHP 無法寫入上傳臨時目錄,它不會報錯而是直接改用系統的臨時目錄(Linux 下的 /tmp 或者 Windows 下的 %SYSTEMROOT%\Temp),造成 upload_tmp_dir 被忽略或未生效的假象。
一般來講,我們都會使用 open_basedir 來限制 PHP 可以訪問的文件系統范圍。這時我們需要注意將上傳臨時目錄也包含在其中。
open_basedir = "/home/wwwroot;/tmp"
如果以上步驟沒有解決問題,則需要檢查 PHP 配置文件 php.ini:
1. 啟用上傳
file_uploads = On
2. 設置上傳文件大小限制
upload_max_filesize = 50M
3. 設置 POST 大小限制
post_max_size = 60M
需要設置為比 upload_max_filesize 大一些。
4. 設置 PHP 內存限制
memory_limit = 128M
需要設置為比 post_max_size 大一些
5. 設置 PHP 接受輸入的時間限制
max_input_time = 60
這個時間是指 PHP 處理輸入數據所花的時間,而非用戶上傳文件所花的時間。確保設置為默認的 60 秒即可。
6. 設置上傳文件臨時目錄
upload_tmp_dir = '/tmp'
此項可以留空,系統會自動使用默認的臨時目錄。但如果使用了 open_basedir 限制 PHP 可以訪問的目錄范圍,則會阻止 PHP 訪問系統臨時目錄,造成上傳失敗。在這種情況下必須指定 upload_tmp_dir。
總結
以上是生活随笔為你收集整理的php上传文件损坏,PHP 上传文件故障排除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初谈逻辑读、物理读、预读
- 下一篇: 纯JS实现简易扫雷小游戏网页项目