1、目錄上傳權限不夠。
2、程序本身漏洞導致,或程序不完整導致。
3、操作系統問題。
檢測目錄權限
當 提示圖片上傳失敗的時候,我首先檢測的是文件權限是否足夠。經過檢測,文件夾的權限是755表示已經足夠,並且已經重新創建了文件夾並賦予最高權限,依然 沒有解決該問題,接著檢測用戶組權限是否足夠,通過檢測也沒有發現任何的問題,因此文件夾權限導致圖片不能正常上傳的可能性被排除。
網站程序完整性
接著檢測網站程序的完整性,發現十多個網站都不能正常上傳圖片,於是排除了網站程序完整性導致圖片上傳失敗的可能性。
操作系統問題
於是檢測 WEB NGINX 服務器,將圖片上傳文件夾的可執行權限開放,但任然不能成功上傳圖片。此時,忽然想起了之前配置過 php.ini 配置文 檔,將 open_basedir 配置成了網站程序所在根目錄 /htdocs,於是將該行代碼註釋掉,之後便成功的上傳了圖片,問題被解決掉。但是, 這樣做放棄了安全性,有些舍不得。
通過以下方法,不僅讓安全性提高,也解決了圖片上傳失敗的問題:
php.ini 中的open_basedir 表示:php程序執行限制在了指定的目錄中,這樣可以限制入侵者繼續提權到操作系統,安全性有更壹步的保障。其 中 upload_tmp_dir 表示的是文件上傳臨時目錄,如果設置了 open_basedir 參數,那麽 upload_tmp_dir 必須 配置,否則文件上傳將不能成功。
總結:遇到圖片不能上傳,表示相當棘手。需要從上傳的圖片類型、圖片的尺寸、文件夾權限、程序完整性到最後 的系統環境壹壹分析,遇到問題不要焦急,相信經過透徹的分析與測試,問題總會被解決掉。本文最終解決方法就有兩個,註釋 open_basedir 該行 代碼就能解決問題,如果配置了 open_basedir 那麽需要設定文件上傳臨時目錄,最後筆者將 upload_tmp_dir 設定 為 /tmp 後,圖片就可以成功上傳了!