作者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