当PHP上传文件时,组和所有者权限错误。

5
我不确定这是php配置问题还是Linux文件权限问题。我遇到的问题是,当一个文件通过php的move_uploaded_file()函数上传到目录中时,该目录的组是ubuntu,所有者是www-data,上传的文件的所有者和组权限会变为www-data,这会导致我的python脚本无法对上传的文件执行任务。
例子:
move_uploaded_file($tempFile,$targetSAVE);

--$targetSAVE目录已设置为:

group: ubuntu
owner: www-data
permissions: 0755

--php上传文件会更改所有者www-data

new file changes to:
  group: www-data  <-- need this set to *ubuntu*
  owner: www-data
  permissions: 0755

--Python脚本需要将上传的文件组设置为ubuntu
如何配置PHP以将上传文件的所有权或组设置为ubuntu,或者如果这是Linux文件权限问题,如何解决?
所有目录和子目录均设置为: 组:ubuntu 拥有者:ubuntu 权限:0755 除了正在上传文件的目录,该目录设置为:
group: ubuntu
owner: www-data
permissions: 0755 
3个回答

3

找到解决方案了。在头发都快被拔光并尝试了所有其他回应之后,事实证明解决方法非常简单,以下是有效的方法。

chown -R ubuntu:www-data /var/www/
chmod -R 775 /var/www/

之后,Python脚本从PHP成功执行。


1

这是因为PHP是以运行Web服务器的用户身份运行的。实际上,系统上的所有网站都将作为此用户/组运行,因此都可以访问由php脚本创建的彼此文件和目录。

安装Apache模块suPHP可能是解决此问题最简单的方法。这将允许您在虚拟主机中以特定用户和组运行php脚本。您还可以将PHP作为CGI运行并使用Apache suEXEC,但是与suPHP相比设置会更加复杂。

或者,您应该能够将脚本中的文件chown到适当的用户/组,但效果将是一旦您更改了它们的所有权,Web服务器将不再能够读取/编辑这些文件。


0

如果在您的情况下有效,我想我只需要在 PHP 脚本的末尾添加一个“chirp”指令。http://us.php.net/manual/en/function.chgrp.php

查看 /etc/passwd 以获取“ubuntu”用户的数字 ID。

文档注释:“只有超级用户可以任意更改文件的组;其他用户可以将文件的组更改为该用户是成员的任何组。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接