【问题标题】:PHP permissions error - I need execute permissions?PHP权限错误 - 我需要执行权限?
【发布时间】:2012-10-21 22:48:52
【问题描述】:

我为文件上传和测试编写了一个 PHP 脚本,我给了我的上传目录 777 权限。脚本运行良好。

现在我想删除执行权限,原因很明显,但是一旦这样做,我就会收到以下错误:

move_uploaded_file([filepath]) [function.move-uploaded-file]:打开流失败:权限被拒绝

当我尝试上传文件时,将权限从 777 降低到 776 会导致出现此错误。我不明白为什么拥有执行权限应该与此有关 - 有人可以解释一下吗?

谢谢!

【问题讨论】:

    标签: php linux upload chmod


    【解决方案1】:

    目录必须具有执行权限才能在 Unix 和 Linux 中访问。

    引用here:

    在目录上,执行权限(也称为“搜索位”) 允许您访问目录中的文件并使用 cd 进入它 命令,例如。但是,请注意,虽然执行位允许 你进入目录,你不能列出它的内容, 除非您还拥有该目录的读取权限。

    我同意 lserni 的观点,即撤销 O(第三位数)对目录的执行权限会导致问题,因为这表明 Web 服务器既不是作为所有者也不是作为组成员访问目录。你应该解决这个问题。

    【讨论】:

      【解决方案2】:

      只是将权限从 777 降低到 776 会导致出现此错误

      这不应该发生。您应该能够以 770 权限运行,即该目录应由网站用户 ID 拥有,并具有 web 服务器组。

      这样,所有者和网络服务器都可以操作目录和数据。理想情况下,为您的网站提供服务的 Web 服务器应该假定与网站所有者相同的用户 ID,这样您就可以保持目录模式 700,并且只有您可以对其进行读写和列出。

      如果权限的最后一位数字对您不利,则表示服务器正在以“所有人”的权限运行,这对于开发站点可能没问题,但在共享站点上不太好(想象一下您的密码机器中的任何其他网站所有者都可以读取)。

      但是,如果您在测试机器上运行,则 777 权限是可以的。目录可执行位并不意味着可执行(无论如何都无法执行目录),而仅仅是“可列出的”。没有那个位,你可以创建和删除文件,但你不知道它们是否真的存在,move_uploaded_files 反对这种情况。

      还有其他解决方案(例如chrooting each virtualhost in Apache);另见What are best practices for permissions on Apache-writable directories?

      【讨论】:

        【解决方案3】:

        要删除执行权限,您需要执行以下命令..

        chown -R nobody upload_directory
        chmod -R 755 upload_directory
        

        第一个命令将您的upload_directory 及其下文件的所有者更改为“nobody”,这是php 在其下运行的。第二个更改 upload_directory 和 files 以仅允许用户访问写入。 -R 是递归的..

        【讨论】:

          猜你喜欢
          • 2022-12-04
          • 2020-05-03
          • 1970-01-01
          • 2021-06-16
          • 2014-06-17
          • 2011-02-10
          • 1970-01-01
          • 2011-11-12
          • 2011-12-10
          相关资源
          最近更新 更多