出現的問題描述:
今天在實現一個在用戶註冊時上傳頭像圖片檔案的PHP腳本時,出現了問題:PHP腳本在前面已經確定
瀏覽器端上傳檔案沒有錯誤。
上傳的文件是合法的。
上傳的檔案是圖像檔案。
已經在伺服器端產生了唯一的檔案名稱。
程式碼
接下來我們應該做的就是把檔案從臨時位置移到固定位置,於是乎我就寫了以下腳本:
//把檔案從臨時位置移到固定位置@move_uploaded_file($_FILES[$image_fieldname ]['tmp_name'], $upload_filename) or handle_error("儲存圖片檔案出錯", "移動檔案出錯" . "{$upload_filename}");
程式碼handle_error()函數是我自己定義的錯誤處理函數,當move_uploaded_file函數執行出錯時,就會跳到錯誤頁,當我執行執行上面的腳本時,腳本跳到了錯誤頁,很明顯是出錯了,首先我排查了一下我的函數參數是否出現了錯誤:
$_FILES[$image_fieldname]['tmp_name']$upload_filename //是我自己組合的檔案路徑,保證沒錯
根據PHP 手冊,我傳入函數的上述兩個參數都是能保證沒有問題的,這麼怎麼回事呢,頁面中都沒有報錯(在函數的前面我使用了PHP的“@”運算符,所以頁面中都沒有報錯(在函數的前面我使用了PHP的“@”運算符,所以頁面中都沒有報錯)
@運算符
注:在代碼中要慎用PHP的@ 運算符,
@運算符可以屏蔽掉所有可能來自用戶輸入無效的問題或SQL查詢包含了一個不正確的列、甚至是一個不規範URL 錯誤都可以避免了,程式碼甚至可以不檢查由用戶、自己或帶那產生的錯誤,簡而言之,@運算符可以屏蔽掉代碼的錯誤信息,一個流行網站經常使用@,因為它們根本不能崩潰或者停止,但是在這種情形下要使用其他解決錯誤的方案。
尋找error log檔
當時我並沒有意識到@運算子對出錯訊息的屏蔽,我就想去找apache的error log 錯誤日誌檔看看,由於我在搭建PHP開發環境的時候使用的是xampp這樣的開發套件,所以error_log檔案跟網路上大部分文章說的不一樣,最後我在
(我的主機是ubuntu)
/opt/lampp/logs
路徑下找到了php_error_log文件,當然這個路徑下還存放著apache的error_log文件,在php_error_log檔案中我看到了出錯問題:權限不夠,我終於找到了出錯的地方:我們存放圖片的目的目錄對執行PHP的用戶來說是沒有權限的,執行PHP腳本的使用者和我寫腳本程式碼、建立圖片資料夾的使用者不是同一個使用者
其實我們本來不用這麼麻煩,我們只要將函數前面的@運算子去掉,然後去掉錯誤處理函數handle_error()函數,然後我們就可以在web頁面看到出錯訊息了。
修改目標資料夾權限
不管怎麼樣,我們還是找到了問題的根源,這是一件很值得高興的事情,既然資料夾所屬使用者和權限不對,那麼我們只要修改這些問題即可:
修改圖片固定存放資料夾的所屬用戶,將其修改為執行apache執行PHP腳本的用戶。
將資料夾的權限改為755
那麼運行apache的使用者是誰呢,我們利用PHP腳本取得:
echo exec('whoami'); //取得執行該檔案的使用者名,從而修改圖片資料夾的權限
這樣我得到了執行腳本的用戶為:daemon,你們得到的很可能跟我的不一樣。
下面我們來修改資料夾的所屬使用者:
chown daemon -R ~/web/hello_php/uploads
~/web/hello_php/uploads是我存放圖片的目標路徑,-R代表遞歸的給這個目錄下的資料夾修改所屬用戶。
接著修改資料夾權限
chmod 775 -R ~/web/hello_php/uploads
這樣我們就大功告成了,
參考閱讀:http://www.manongjc.com/artic/1494.

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版
視覺化網頁開發工具