move_uploaded_file()给出了所有者/组错误

时间:2012-06-05 02:51:13

标签: php linux centos

我正在使用move_uploaded_file()将图片上传到服务器,但它会产生以下常见错误:

Warning: move_uploaded_file(upload/file.png) [function.move-uploaded-file]: 
failed to open stream: No such file or directory in 
/home/newuser/public_html/model/account.class.php on line 39

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move       
'/tmp/phpuLkUgE' to 'upload/file.png' in     
/home/newuser/public_html/model/account.class.php on line 39

这是非基于权限,因为我已将文件夹设置为777并具有root访问权限,ls -l正确显示该文件夹。

755 /home/newuser/public_html/model
755 /home/newuser/public_html/model/account.class.php
777 /home/newuser/public_html/upload

PHP专线

move_uploaded_file($_FILES["photo"]["tmp_name"], "../upload/file.png");

我认为问题在于所有者/组设置配置不正确..前段时间我将所有网站都作为子域名放在一个帐户中:

/home/olduser/public_html/subdomains/index.html

然后我更改了这个并创建了一个新的用户帐户,以便更轻松地管理单独的网站,并将文件移到...

/home/olduser/public_html/subdomains
/home/newuser/public_html/index.html

/home/newuser中的新文件夹现已拥有并归类为newuser newuser,但我认为php可能会以nobody olduser运行,因此可能导致此问题?

我可以尝试解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

特定文件/目录的权限不仅适用于目录本身,而且适用于导致它的整个路径。

示例:

/home/ - needs 'x' permission (execute)
/home/newuser/ - needs 'x' permission
/home/newuser/public_html/ - needs 'x' permission
/home/newuser/public_html/avatar/ - needs 'wx' permission (execute + write)

答案 1 :(得分:0)

在Jack的答案下间接地反映了Silver89的反馈,但并没有直截了当地说 - 所以我想提供一个答案,帮助我解决了这个让我长时间摸不着头脑的问题。 ;)

我为move_uploaded_file()的目标找到的最佳方法是使用完整的绝对路径。它可以根据您是在Unix \ Linux服务器还是Windows服务器上而有所不同,但这应该为您提供基本的想法。

在我的Unix服务器上工作时,你不能使用“../anything”,但必须使用/var/www/html/uploads/imagename.jpg的完整绝对内部文件路径。

这就是为什么你的上一次测试对你有用,Silver89 - 因为你的服务器可能试图将图像上传到http://yourservername.com/upload/file.png而不是http://www.yourservername.com/yoursubfolder/upload/file.png。它可能完全抛弃了“../”部分,并且该文件夹在服务器上不存在。

您可以通过登录服务器(终端/ ssh等)并发出'pwd'命令或使用PHP代码并在剥离的php文件中回显getcwd()命令来找出完整路径名称是什么图像所在的文件夹。

This site有助于根据您的服务器使用不同的PHP服务器配置检查功能来解决这个问题 - 请参阅中间的表格。您可以简单地将这些回显到屏幕,例如:

echo $_SERVER["SCRIPT_FILENAME"]. 

这对我来说很难,所以我希望这会让下一个人找到更容易 - 即使这是8个月大。 ;)