chown:不允许操作

时间:2012-11-05 03:10:54

标签: php linux shell

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

所以我通过以下命令执行此操作,其中1002是系统的用户ID。

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

但是我只在制作服务器中收到此错误(测试服务器工作正常)

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

2 个答案:

答案 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。

我希望它有所帮助。干杯!