2012-11-05 182 views
3

我有问题,我需要通过一个PHP脚本CHOWN:操作不允许

,所以我通过这个下面的命令做到这一点,其中1002的用户ID来设置文件所有者的许可系统中的不同用户系统。

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

但是我得到了制作这个错误唯一的服务器(测试服务器正常工作)

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

请将其中一个答案标记为解决方案,以便将此问题标记为已关闭。如果它们中没有一个提供解决方案,则提供附加信息。谢谢。 – mattc

+0

如果脚本通过cron运行,它将以root用户身份运行,这将有能力更改文件所有权。 (非超级用户喜欢''apache'用户不。)希望这可以帮助一些人! –

回答

4

既然你标记这个问题为Linux我假设你使用Apache服务器。在生产服务器Apache过程,该公司拥有的所有PHP进程,通常是由不属于root userapache user或其它用户执行。

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

你看,引述PHP手册中,chown功能尝试改变所有者:

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

在通常你生产服务器正在运行,如用户目录模式,这意味着你一定会是你的主目录中的文件,像/home/yourusername/public_html正因为如此,在/var目录中的文件只是出来的你的触及范围(它们通常由root拥有),这就是为什么你不能chown。

我希望它有帮助。干杯!

4

你只能改变文件的拥有者,如果你是root用户(或运行以root权限)。

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

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

一些变通,可根据情况帮助,您可以使用chgrp功能改变文件的“组”设置。任何拥有该文件写入权限的人都可以这样做。您也可以将文件写入到使用chmod功能的人,虽然这可能是危险的。链接到两个功能如下: