PHP移动上传文件权限被拒绝(权限设置为755)

PHP移动上传文件权限被拒绝(权限设置为755),php,file-permissions,Php,File Permissions,我试图用一个简单的HTML输入表单上传一个用户的照片,但是我得到了以下错误。我已将上载文件夹的权限设置为755。我试过777,效果很好,但我读到不建议将其设置为777,我应该可以使用755 Warning: move_uploaded_file(uploads/2014_08_21_11_03_14k.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/yadayada/reg

我试图用一个简单的HTML输入表单上传一个用户的照片,但是我得到了以下错误。我已将上载文件夹的权限设置为755。我试过777,效果很好,但我读到不建议将其设置为777,我应该可以使用755

Warning: move_uploaded_file(uploads/2014_08_21_11_03_14k.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/yadayada/register.php on line 136
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php8KQwyh' to 'uploads/2014_08_21_11_03_14k.jpg' in /home/yadayada/register.php on line 136
这是我的php代码:

$userPhotoUrl = 'uploads/'.date('Y_m_d_H_i_s').$_FILES['photo']['name'];

if (is_uploaded_file($_FILES['photo']['tmp_name'])) {
    if (!move_uploaded_file($_FILES['photo']['tmp_name'], $userPhotoUrl)) {
        // show error message
        return;
    }
} else {
    // show error message
    return;
}

首先,你必须了解什么是755

对于文件夹,755表示
drwxr-xr-x
,表示:

  • 所有者具有读取、写入和执行权限
  • 组和公共仅具有读取和执行权限
由于运行PHP的用户可能不是文件夹的所有者,因此它没有对文件夹的写入权限。要么:

  • chown
    将文件夹发送给PHP的用户;或
  • 您使其成为
    777
    :每个人都有读、写和执行权限

当然,后一种选择存在安全问题,就像有人将可执行的shell脚本上传到您的文件夹中一样,他可以执行该脚本。因此,您应该坚持第一种选择。

您可能应该将上载文件夹(移动)转移到与PHP运行相同的用户。试试这个

chown -R nobody uploaddir
chmod -R 755 uploaddir
对此有意见吗


如果设置为755,您的Web服务器将成为文件夹的所有者。

?不是真的。文件夹所有者不一定是web服务器的用户。我想我发现了问题。我将.htaccess文件放在了错误的文件夹中。现在可以工作:)仅供参考,
chown
可以通过SSH在服务器外壳中运行。难道
r-x
不意味着读取和执行吗?你为什么说它是“只读权限”?