作者noggi (阿部)
看板PHP
標題[請益] 遇到個問題有關move_uploaded_file
時間Mon May 13 15:09:17 2013
Hi...各位!在下在學習php過程當中遇到一關卡著過不去。
先說明我的系統:
我的server是用mac osx server
PHP version 5.3.15
我所學習的書籍是:O'Relly PHP&MySQL 手冊
目前是學習到如何上傳照片
以下是我的code(有些無關此次尋問的我就刪掉)
①HTML部份
<form action="get-register.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<label for="userPic">上傳圖片</label>
<input type="file" name="userPic" size="30">
<input type="submit" value="送出">
</form>
②接收php(get-register.php)
$uploadDIR=SITEROOT."uploads/profiles-pics/"; //SITEROOT 定義常數=/mySite/
$imageFieldName="userPic";
$phpErrors=array(1=>"Maximum files size in php.ini exceeded",
2=>"Maximum files size in HTML form exceeded",
3=>"Only part of the file was upload",
4=>"No file was selected to upload");
//Check 1:
($_FILES[$imageFieldName]["error"]==0) or handleError();
//handleError()是我有自定一個錯誤頁面的引導這裡我就不寫內容
//Check 2:
@is_uploaded_file($_FILES[$imageFieldName]["tmp_name"]) or handleError();
//Check 3:
@getimagesize($_FILES[$imageFieldName]["tmp_name"]) or handleError();
//Check 4:命名照片 (抱歉碼太長,拆行一下)
$now=time();
while(
file_exists(
$uploadFileName=
$uploadDIR.$now."-".$_FILES[$imageFieldName]["name"]
)
){
$now++;
}
//Check 5:
@move_uploaded_file($_FILES[$imageFieldName]["tmp_name"],$uploadFileName)
or handleErro();
***************以下開始我所遇到的問題述敘*************
1.目前我出錯的地方是在Check 5,也就是在搬移檔案時出現false
2.我試著去debug輸出各階段的值如下,都是正確:
$_FILES[$imageFieldName]["tmp_name"] //暫存檔
$_FILES[$imageFieldName]["name"] //上傳檔名
$uploadFileName //上傳路徑+時間+"-"+上傳檔名
3.上網查了相關問題,有說到可能是存檔資料夾的權限的問題,所以我做了如下:
將/uploads/profiles-pic/這二個資料夾更改權限為
sudo chown nobody /這二個資料夾/
sudo chmod 755 /這二個資料夾/
結果move_uploaded_file還是傳回false
4.又查了去php.ini將暫存檔的位置更改為./phpTmp/並將其權限改為777
結果還是不行
在下已經找不到該如何去處理,希望有人能幫我解答,非常感謝大伙看完,感謝!
ps:我目前還滿懷疑是預設暫存檔會不會有問題?
我附上$_FILES[$imageFieldName]["tmp_name"]的值如下:
/private/var/tmp/phpYCroKR
--
我不該放下拳頭~
更不該背對著敵人~
否則我將永遠倒地不起~
million dollar baby..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 49.159.8.13
※ 編輯: noggi 來自: 49.159.8.13 (05/13 15:10)
1F:推 wayway2004:try sudo chmod 777 -R /這二個資料夾/ 05/13 15:15
2F:推 azurewings:或者是sudo chown -R apache:[group name] /資料夾/ 05/13 16:09
3F:→ azurewings:其中"apache"可能要看使用的架站系統 會有不同 05/13 16:09
4F:→ noggi:wayway2004的方法試了,還是傳回false 05/13 16:49
5F:→ noggi:azurewings:您說的設定了,也無法!先感謝樓上二位 05/13 16:50
6F:推 azurewings:error log的訊息呢 剛好昨天也寫了類似的東西 XD 05/13 17:06
7F:→ azurewings:我跟wayway2004的做法是假設該資料夾無適當的寫入權限 05/13 17:07
8F:→ wayway2004:SITEROOT應該改為主機實體路徑 05/13 17:16
9F:→ noggi:很抱歉樓上二位。試到筆電沒電了,晚上才能充電,目前還再試 05/13 17:56
10F:→ noggi:SITEROOT使用實體路徑也是回傳false 05/13 22:09
11F:→ noggi:想請問一下該不會是我的php.ini當中的open_basedir沒設置? 05/13 23:59
12F:→ noggi:終於…淚~~第一:沒錯就是要用絕對路徑! 05/14 02:08
13F:→ noggi:第二:own要改成_www,之前一直是nobody 05/14 02:09
14F:→ noggi:感謝樓上幾位的幫忙!非常感謝! 05/14 02:10