在PHP中使用move_uploaded_file()
函数时,我收到错误:
警告:move_uploaded_file(...):无法打开流:在...中拒绝权限
在我的服务器上,我拥有public_html
权限,例如:
drwxr-sr-x 7 user www-data 4096 Apr 27 17:48 public_html
这是递归遍历目录的。
你有任何想法为什么这可能不起作用?或者我可以做些什么来帮助我找出为什么这不起作用。
服务器实际上是一个集群,其中文件在NAS上,而php在集群上。我正在NAS的设备上执行所有权限命令,因为这是用户FTP所在的位置。
答案 0 :(得分:0)
首先,SUID和SGID仅在与可执行文件一起使用时才有意义。
来自http://www.codecoffee.com/tipsforlinux/articles/028.html:
SUID(设置用户ID)位
[...]如果我有一个申请人,其所有者是' root'并且它设置了SUID位,然后当我以普通用户身份运行此应用程序时,该应用程序仍将以root身份运行。由于SUID位告诉Linux已为此应用程序设置了用户ID根,并且每当此应用程序执行时,它必须执行,就像root正在执行它一样(因为root拥有此文件)
SGID(设置组ID)位
就像SUID一样,设置文件的SGID位会在文件执行时将您的组ID设置为文件组。如果您拥有真正的多用户设置,用户可以访问其他文件,那么IT非常有用。作为一个单一的家庭用户,我还没有真正发现SGID的大量用途。但基本概念与SUID相同,其SGID位设置的文件将被用作属于该组而不是仅属于该用户。
因此,如果您的网络文件都不需要作为正常流程执行,那么最好不要单独留下SGID。
最后,如果您没有更改网络服务器的安全上下文,那么(很可能是,因为您没有提及任何路径)会尝试移动文件位于www-data
目录中的只能读取。要移动文件,您需要对文件 并且 移动到的目录具有写访问权限。因此www-data
应该写访问
/tmp
,在这种情况下无需执行任何操作)答案 1 :(得分:0)
用户www-data无法写入public_html目录。在public_html上使用chmod来授予www-data写权限:
chmod 775 public_html -R