Php 周:不允许操作

Php 周:不允许操作,php,linux,shell,Php,Linux,Shell,我有一个问题,需要通过php脚本将文件所有者权限设置为系统中的不同用户 所以我通过下面的命令来实现,其中1002是系统的用户id file_put_contents($filename, $content); system("chown 1002 " . $filename . ""); 但是,我仅在productions server中遇到此错误(测试服务器工作正常) 仅当您是root用户(或以root权限运行)时,才允许更改文件的所有者 尝试将文件名的所有者更改为用户。只有超级用户可以更改

我有一个问题,需要通过php脚本将文件所有者权限设置为系统中的不同用户

所以我通过下面的命令来实现,其中1002是系统的用户id

file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");
但是,我仅在productions server中遇到此错误(测试服务器工作正常)


仅当您是root用户(或以root权限运行)时,才允许更改文件的所有者

尝试将文件名的所有者更改为用户。只有超级用户可以更改文件的所有者。

最有可能的情况是,在测试服务器上,运行php脚本的apache进程已经拥有该文件,或者您正在以root权限运行该文件,而在生产服务器上则不是这样。我绝对不建议在具有root权限的生产环境中运行

根据具体情况,您可以使用
chgrp
功能更改文件的“组”设置。这是任何对文件具有写入权限的人都允许的。您还可以使用
chmod
函数使文件对任何人都可写,尽管这可能很危险。下面列出了指向这两个功能的链接:


既然您将这个问题标记为
Linux
,我假设您使用的是
Apache
服务器。在生产服务器中,
Apache
进程拥有所有php进程,通常由
Apache用户
或非
根用户
的其他用户执行

记住这一点,您要做的是使用
chown
函数(将作为apache用户执行)更改您不拥有的文件的所有者。(是的,您只能将所有者更改为您拥有的文件)

引用php手册,函数尝试更改所有者:

尝试将文件名的所有者更改为用户。只有超级用户可以更改文件的所有者

在生产服务器中,您通常以用户目录模式运行,这意味着您被绑定到主目录中的文件,例如
/home/yourusername/public\u html
,因此,
/var
目录中的文件根本无法访问(它们通常归root所有)这就是为什么你不能吃东西


我希望这有帮助。干杯

请将其中一个答案标记为解决方案,以便将此问题标记为已结束。如果它们都没有提供解决方案,请提供其他信息。谢谢。如果脚本是通过cron运行的,它将以root用户身份运行,root用户可以更改文件所有权。(像apache这样的非超级用户不需要。)希望这能帮助一些人!
chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted