我有一个问题,我需要通过php脚本将文件所有者权限设置为系统中的不同用户
因此,我通过以下命令完成此操作,其中1002是系统的用户id。
file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");然而,我只在productions服务器中得到这个错误(测试服务器它工作正常)
chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted发布于 2012-11-05 11:18:52
由于您将此问题标记为Linux,因此我假设您使用Apache服务器。在生产服务器中,拥有所有Apache进程的php进程通常由apache user或其他非root user用户执行。
记住这一点,您要尝试做的是使用chown函数(将以apache用户身份执行)来更改您不拥有的文件的所有者。(可以,您只能将所有者更改为您拥有的文件)。
您看,引用php手册,chown函数尝试更改所有者:
尝试将文件文件名的所有者更改为用户用户。只有超级用户才能更改文件的所有者。
在生产服务器中,您通常在用户目录模式下运行,这意味着您绑定到主目录中的文件,例如/home/yourusername/public_html,因此,/var目录中的文件根本不在您的控制范围内(它们通常由根拥有),这就是您无法chown的原因。
我希望它能帮上忙。干杯!
发布于 2012-11-05 11:17:53
只有当您是root用户(或以root权限运行)时,才允许更改文件的所有者。
尝试将文件文件名的所有者更改为用户用户。只有超级用户才能更改文件的所有者。http://www.php.net/manual/en/function.chown.php
在您的测试服务器上,运行php脚本的apache进程很可能已经拥有该文件,或者您正在以root权限运行该文件,而在您的生产服务器上情况并非如此。我绝对不推荐在具有root权限的生产环境中运行。
根据具体情况,您可以使用chgrp函数更改文件的“组”设置,这可能会有所帮助。对该文件具有写权限的任何人都允许这样做。您还可以使用chmod函数使该文件对任何人可写,尽管这可能很危险。下面列出了这两个函数的链接:
https://stackoverflow.com/questions/13225453
复制相似问题