授予php创建文件的权限,但没有权限错误

授予php创建文件的权限,但没有权限错误,php,nginx,ubuntu-14.04,Php,Nginx,Ubuntu 14.04,在PHP中使用move\u uploaded\u file()函数时,我发现错误: 警告:移动上载的文件(…):无法打开流:在中的权限被拒绝 在我的服务器上,我有如下public\u html权限: drwxr-sr-x 7 user www-data 4096 Apr 27 17:48 public_html 它递归地通过目录 你知道为什么这可能不起作用吗?或者我能做些什么来帮助我找出为什么这不起作用 系统 服务器实际上是一个集群,其中文件位于NAS上,php位于集群上。我正在NAS设备上

在PHP中使用
move\u uploaded\u file()
函数时,我发现错误:

警告:移动上载的文件(…):无法打开流:在中的权限被拒绝

在我的服务器上,我有如下
public\u html
权限:

drwxr-sr-x 7 user www-data 4096 Apr 27 17:48 public_html
它递归地通过目录

你知道为什么这可能不起作用吗?或者我能做些什么来帮助我找出为什么这不起作用


系统
服务器实际上是一个集群,其中文件位于NAS上,php位于集群上。我正在NAS设备上执行所有权限命令,因为用户的FTP将在该设备上执行。

首先,SUID和SGID仅在与可执行文件一起使用时才有意义

发件人:

SUID(设置用户ID)位

[…]如果我有一个所有者为“root”的应用程序,并且它设置了SUID位,那么当我以普通用户的身份运行该应用程序时,该应用程序仍将以root用户的身份运行。因为SUID位告诉Linux用户ID root是为这个应用程序设置的,所以每当这个应用程序执行时,它必须像root用户执行它一样执行(因为root用户拥有这个文件)

SGID(设置组ID)位

与SUID一样,设置文件的SGID位可以在文件执行时将组ID设置为文件的组。如果您有一个真正的多用户设置,用户可以访问彼此的文件,那么它非常有用。作为一个家庭用户,我还没有发现SGID有多大用处。但基本概念与SUID相同,设置了SGID位的文件将被使用,就好像它们属于该组,而不仅仅属于该用户一样

因此,如果您的web文件都不需要作为正常进程执行,那么最好不要使用SGID

最后,如果您没有更改web服务器的安全上下文,它(很可能,因为您没有提到任何路径)会尝试移动位于目录
www data
只能读取的文件。要移动文件,您需要对文件所在和将要移动到的目录具有写访问权限。所以
www数据
应该被授予对

  • 文件首先到达的目录(默认情况下:
    /tmp
    ,在这种情况下无需执行任何操作)
  • 目标目录,它将被移动到该目录

  • 用户www数据无法写入公共\u html目录。在公共html上使用chmod授予www数据写入权限:

    chmod 775 public_html -R 
    

    您没有在错误中给出路径,因此请查看php.ini或其他ini文件中的
    upload\u tmp\u dir
    sys\u temp\u dir
    。您实际上是在上载文件还是只是试图移动现有文件?
    upload\u tmp\u dir
    已被注释掉(因此使用默认设置),是否需要创建它?当我
    echo sys_get_temp_dir()时
    I get
    /tmp
    sys\u temp\u dir
    在php中找不到。我可以发誓我已经试过一百万次了!!但这似乎奏效了。这是我第一次在实际的群集而不是NAS上执行此操作。。。你认为这与此有关吗?