chown:不允许操作

我有问题,我需要通过PHP脚本在系统中的不同用户设置文件所有者的权限

所以我通过以下命令来做到这一点,其中1002是系统的用户ID。

file_put_contents($filename, $content); system("chown 1002 " . $filename . ""); 

然而,我只在生产服务器(testing服务器,它工作正常)得到这个错误

 chown: changing ownership of `/var/spool/asterisk/06h12m7.call': Operation not permitted 

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

考虑到这一点,你要做的是使用chown函数(它将以apache用户身份执行)来更改不属于你的文件的所有者。 (是的,您只能将所有者更改为您拥有的文件)。

你看,引用PHP手册, chown函数试图改变所有者:

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

在生产服务器中,您通常以用户目录模式运行,这意味着您被绑定到主目录中的文件,如/home/yourusername/public_html ,因此/var目录内的文件完全不在你的触及范围(他们通常由根拥有),这就是为什么你不能chown。

我希望它有帮助。 干杯!

如果您是root用户(或以root权限运行),则只能更改文件的所有者。

尝试将文件文件名的所有者更改为用户用户。 只有超级用户可以更改文件的所有者。 http://www.php.net/manual/en/function.chown.php

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

有些解决方法可能有助于根据情况,可以使用chgrp功能更改文件的“组”设置。 任何拥有写入权限的人都可以使用这个功能。 您也可以使用chmod函数将文件写入任何人,尽管这可能是危险的。 下面列出了这两个函数的链接: