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

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁(yè)開發(fā)工具

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