3

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

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

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

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

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

2 回答 2

4

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

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

很可能在您的测试服务器上运行 php 脚本的 apache 进程已经拥有该文件,或者您正在以 root 权限运行它,而在您的生产服务器上并非如此。我绝对不建议在具有 root 权限的生产环境中运行。

一些可能会根据情况有所帮助的变通方法,您可以使用该chgrp功能更改文件的“组”设置。对文件具有写入权限的任何人都允许这样做。您还可以使文件对使用该chmod函数的任何人都可写,尽管这可能很危险。下面列出了这两个函数的链接:

于 2012-11-05T03:17:53.067 回答
4

由于您在Linux我假设您使用Apache服务器时标记了这个问题。在生产服务器Apache中,拥有所有 php 进程的进程通常由apache userroot user.

记住这一点,您要做的是使用该chown函数(将作为 apache 用户执行)来更改您不拥有的文件的所有者。(是的,您只能将所有者更改为您拥有的文件)。

您会看到,引用 php 手册,chown函数尝试更改所有者:

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

在生产服务器中,您通常以用户目录模式运行,这意味着您绑定到主目录中的文件,类似/home/yourusername/public_html这样,/var目录中的文件根本无法触及(它们通常由root) 这就是为什么你不能 chown。

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

于 2012-11-05T03:18:52.490 回答