上传到我的服务器时出错

时间:2015-07-17 16:15:04

标签: php file-upload

它对本地主机很好。但是,当我上传到我的服务器时,我收到此错误:

  

警告:move_uploaded_file(uploads / 55a92822cc379 ^ 0C3C66D7264AB79F9D6963823CCC90CEC2A8221.png):无法打开流:第51行的/var/www/chrispantelli.me/public_html/upload/upload.php中的权限被拒绝

     

警告:move_uploaded_file():无法移动' / tmp / phpk7R86o'到'上传/ 55a92822cc379 ^ 0C3C66D7264AB79F9D6963823CCC90CEC2A8221.png'在第51行的/var/www/chrispantelli.me/public_html/upload/upload.php中

这是代码:

http://pastebin.com/raw.php?i=9w9hy2Lj

1 个答案:

答案 0 :(得分:0)

这意味着拥有php(Web服务)进程的用户ID对目标文件夹没有写入权限。该脚本未列出该目标文件夹的内容,因此请检查以确保Web服务所有者在那里具有写入权限(或者如果另一个用户ID拥有该目录,您也可以使用组。)

编辑: 770 =>用户(所有者)具有读/写/执行,组是读/写/执行,而其他用户没有权限。 例如,如果主机上运行的http进程由“apache”userID拥有,那么如果uploads目录也由“apache”拥有,则700权限将起作用。拥有该目录的用户可以写入该目录。 如果uploads目录由root拥有,可以说,但该组是“apache”,然后假设apache用户在apache组中,770权限将起作用,因为你也给了组写权限。

为了找到拥有您的http进程的用户,假设您正在运行apache:

ps -ef |grep http

这应该给你一些看起来像这样的东西:

apache 1234 5678 0 Jul17 ?   10:00:24 httpd

在这种情况下,第1列是拥有该进程的用户。您可以通过以下方式获取该用户的组:

groups apache
apache : apache

这意味着用户ID“apache”是组“apache”的成员。所以,如果是这种情况,那么尝试更改uploads目录的所有者,如下所示:

chown apache /path/to/your/uploads/dir

然后您可以将权限更改为700(因为如果人们从您的网站上传,则apache是​​唯一需要写访问权限的ID。

chmod 700 /path/to/your/uploads/dir

同样,如果另一个用户ID(比方说root)拥有上传目录,并且你想保持这种方式,你可以这样做:

chgrp apache /path/to/your/uploads/dir
chmod 770 /path/to/your/uploads/dir

这将使apache组的成员(可能只是一个用户“apache”)对该目录进行写访问,允许您上传。

希望这是有道理的。