我有问题,我需要通过php脚本将文件所有者权限设置为系统中的不同用户
所以我通过以下命令执行此操作,其中1002是系统的用户ID。
file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");
但是我只在制作服务器中收到此错误(测试服务器工作正常)
chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted
答案 0 :(得分:4)
如果您是root用户(或以root权限运行),则只允许更改文件的所有者。
尝试将文件filename的所有者更改为用户user。只有超级用户才可以更改文件的所有者。 http://www.php.net/manual/en/function.chown.php
最有可能在您的测试服务器上运行php脚本的apache进程已拥有该文件,或者您使用root权限运行它,而生产服务器上则不是这种情况。我绝对不建议在具有root权限的生产环境中运行。
根据具体情况,可能会有所帮助,您可以使用chgrp
功能更改文件的“组”设置。任何对该文件具有写权限的人都允许这样做。您也可以使用chmod
函数将文件写入任何人,尽管这可能很危险。下面列出了这两种功能的链接:
答案 1 :(得分:4)
由于您将此问题标记为Linux
我假设您使用Apache
服务器。在生产服务器中,拥有所有php进程的Apache
进程通常由apache user
或非root user
的其他用户执行。
请记住,您要做的是使用chown
函数(将以apache用户身份执行)来更改您不拥有的文件的所有者。 (是的,您只能将所有者更改为您拥有的文件)。
你看,引用php手册,chown函数尝试来更改所有者:
尝试将文件filename的所有者更改为用户user。只有超级用户才能更改文件的所有者。
在生产服务器中,您通常以用户目录模式运行,这意味着您将绑定到主目录中的文件,例如/home/yourusername/public_html
,因此/var
内的文件目录根本无法触及(它们通常由root拥有),这就是为什么你不能chown。
我希望它有所帮助。干杯!