2

我为文件上传和测试编写了一个 PHP 脚本,我给了我的上传目录 777 权限。该脚本工作正常。

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

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

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

谢谢!

4

3 回答 3

3

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

从这里引用:

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

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

于 2012-10-21T22:52:52.840 回答
0

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

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

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

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

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

还有其他解决方案(例如chrooting Apache 中的每个虚拟主机);另请参阅Apache 可写目录权限的最佳实践是什么?

于 2012-10-21T23:02:22.223 回答
-1

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

chown -R nobody upload_directory
chmod -R 755 upload_directory

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

于 2012-11-01T16:27:18.683 回答