如何在PHP中使用chown命令?

How to use chown command in PHP?

我希望用户能够阅读和编辑测试文件夹中的文件,这些文件总是由具有只读属性的软件创建的。

我无法手动使用chown命令,所以我需要一个chown命令,可以在PHP之前自动执行用户的读写命令。

手动确定:

root@vultr: chown -R nginx /var/www/html/test //run ok, All files in the test folder can be read and written

root@vultr:~# /var/www/html/test/test.sh //run ok, the test.sh file contains the "chown -R nginx command /var/www/html/test"

我的 php 代码不起作用

shell_exec('./test.sh'); 

chown('file_webuser', 'nginx');

使用 PHP 中的 exec(),这样您的代码将如下所示:

exec("chown -R nginx /var/www/html/test");

这是因为 root 用户可能有权限操作这些由 Nginx 等创建的文件。 如果 PHP 不是该文件的所有者,您可以将其放在他们希望访问的授权组中。

非 root 用户无法使用 chown(更改所有者)。您真正需要做的是授予用户(我假设它是 nginx)对文件的完全权限。

可以通过几种方式实现。最安全的方法是 运行 PHP(我猜 PHP 是 运行ning 作为 PHP-FPM)作为 nginx用户通过编辑 php-fpm.conf 文件中的参数 usergroup 并重新启动 PHP 服务。 在这种情况下,文件的所有者将是相同的,因此不需要文件权限操作。您需要通过 PHP 将所有文件 generated/uploaded 的所有权更改为 nginx 一次(使用 root 用户和 chown 命令)。

第二种解决方案是将 运行ning PHP-FPM 的用户添加到与 nginx 用户相同的组并修改 umask 以便组可以访问文件.假设该组是 www-data(您必须将 nginx 用户和 PHP-FPM 进程所有者添加到该组,例如使用 usermod 命令,然后编辑你的 php-fpm.conf:将 group 设置为 www-data)。然后在你的 PHP 脚本中使用 umask 函数来允许组的所有成员拥有对文件的完全访问权限:umask(0007);.

第三种最不安全的方法是为系统中的所有用户授予对您的文件的完全访问权限。在 PHP 文件中使用 umask 函数来实现此目的:umask(0000);