看板 PHP 關於我們 聯絡資訊
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)
wayway2004:try sudo chmod 777 -R /這二個資料夾/ 05/13 15:15
azurewings:或者是sudo chown -R apache:[group name] /資料夾/ 05/13 16:09
azurewings:其中"apache"可能要看使用的架站系統 會有不同 05/13 16:09
noggi:wayway2004的方法試了,還是傳回false 05/13 16:49
noggi:azurewings:您說的設定了,也無法!先感謝樓上二位 05/13 16:50
azurewings:error log的訊息呢 剛好昨天也寫了類似的東西 XD 05/13 17:06
azurewings:我跟wayway2004的做法是假設該資料夾無適當的寫入權限 05/13 17:07
wayway2004:SITEROOT應該改為主機實體路徑 05/13 17:16
noggi:很抱歉樓上二位。試到筆電沒電了,晚上才能充電,目前還再試 05/13 17:56
noggi:SITEROOT使用實體路徑也是回傳false 05/13 22:09
noggi:想請問一下該不會是我的php.ini當中的open_basedir沒設置? 05/13 23:59
noggi:終於…淚~~第一:沒錯就是要用絕對路徑! 05/14 02:08
noggi:第二:own要改成_www,之前一直是nobody 05/14 02:09
noggi:感謝樓上幾位的幫忙!非常感謝! 05/14 02:10