【问题标题】:PHP move_uploaded_file permission denied (permission set to 755)PHP move_uploaded_file 权限被拒绝(权限设置为 755)
【发布时间】:2014-08-21 09:08:22
【问题描述】:

我正在尝试使用简单的 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;
}

【问题讨论】:

    标签: php file-permissions


    【解决方案1】:

    首先你要了解什么是755。

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

    • 所有者拥有读取、写入和执行权限
    • 组和公众只有读取和执行权限

    由于运行 PHP 的用户可能不是该文件夹的所有者,因此它没有对该文件夹的写入权限。要么:

    • chown文件夹给PHP的用户;或
    • 你做到了777:每个人都有读、写和执行权限

    当然,后一种选择是有安全问题的,好像有人上传了一个可执行的shell脚本到你的文件夹,他就可以执行这个脚本。因此,您应该坚持首选。

    【讨论】:

    • 我想我找到了问题所在。我将 .htaccess 文件放在了错误的文件夹中。现在工作:)
    • 仅供参考,chown 可以通过 SSH 在服务器的 shell 中运行。
    • r-x 不是表示读取和执行吗?为什么说它是“只读权限”?
    【解决方案2】:

    您可能应该将上传文件夹(移动)分配给运行 PHP 的同一用户。试试这个

    chown -R nobody uploaddir
    chmod -R 755 uploaddir
    

    【讨论】:

      【解决方案3】:

      看看这个Permission

      如果您设置 755,您的网络服务器将是该文件夹的所有者。

      【讨论】:

      • 嗯?不对。文件夹所有者不一定是网络服务器用户的用户。
      猜你喜欢
      • 2014-06-29
      • 2012-07-27
      • 2012-05-03
      • 2012-07-07
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2013-08-07
      • 2018-03-19
      相关资源
      最近更新 更多