[請益] 遇到個問題有關move_uploaded_file

看板PHP作者 (阿部)時間12年前 (2013/05/13 15:09), 編輯推噓3(3011)
留言14則, 3人參與, 最新討論串1/1
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)

05/13 15:15, , 1F
try sudo chmod 777 -R /這二個資料夾/
05/13 15:15, 1F

05/13 16:09, , 2F
或者是sudo chown -R apache:[group name] /資料夾/
05/13 16:09, 2F

05/13 16:09, , 3F
其中"apache"可能要看使用的架站系統 會有不同
05/13 16:09, 3F

05/13 16:49, , 4F
wayway2004的方法試了,還是傳回false
05/13 16:49, 4F

05/13 16:50, , 5F
azurewings:您說的設定了,也無法!先感謝樓上二位
05/13 16:50, 5F

05/13 17:06, , 6F
error log的訊息呢 剛好昨天也寫了類似的東西 XD
05/13 17:06, 6F

05/13 17:07, , 7F
我跟wayway2004的做法是假設該資料夾無適當的寫入權限
05/13 17:07, 7F

05/13 17:16, , 8F
SITEROOT應該改為主機實體路徑
05/13 17:16, 8F

05/13 17:56, , 9F
很抱歉樓上二位。試到筆電沒電了,晚上才能充電,目前還再試
05/13 17:56, 9F

05/13 22:09, , 10F
SITEROOT使用實體路徑也是回傳false
05/13 22:09, 10F

05/13 23:59, , 11F
想請問一下該不會是我的php.ini當中的open_basedir沒設置?
05/13 23:59, 11F

05/14 02:08, , 12F
終於…淚~~第一:沒錯就是要用絕對路徑!
05/14 02:08, 12F

05/14 02:09, , 13F
第二:own要改成_www,之前一直是nobody
05/14 02:09, 13F

05/14 02:10, , 14F
感謝樓上幾位的幫忙!非常感謝!
05/14 02:10, 14F
文章代碼(AID): #1Ha96Zta (PHP)
文章代碼(AID): #1Ha96Zta (PHP)