使用PHP脚本更改新创建的目录的所有者和组

时间:2014-08-13 09:06:46

标签: php permissions chown

运行debain LAMP的专用Linux服务器。

我运行一个PHP脚本(使用浏览器),它在同一台服务器上的文件夹中创建一个目录(和各种子目录),以便随后使用Dropbox共享使用。
目录在/home/dropbox/New_Project_Name/new_folders中创建,并且应由用户'dropbox'拥有。

但是,运行php脚本会导致脚本生成的新创建的目录归'www-data'所有

从浏览器运行php脚本以便生成具有用户和组“dropbox”所有权的新目录或随后运行脚本以检查www-data所有权和递归更改文件的最佳原因是什么?目录到'dropbox'

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

好的 - 终于让这个工作了(谢谢大家)但是将以下内容添加到我的 / etc / sudoers

www-data ALL=(ALL) NOPASSWD: /bin/chown, /home/sites/public_html/change_owner.php

PHP文件的内容与DasSaffe的答案相同

答案 1 :(得分:0)

未经过测试,但在创建文件夹后,您可以运行另一行代码来更改所有者/组

// define user and group
$owner = "dropbox";
$group = "dropbox";
$folder = "/home/dropbox/New_Project_Name/new_folders";

// change the owner and group
chown($folder, $owner);
chgrp($folder, $group);

请记住,它可能会引发错误,因为存在子文件夹并且操作失败。 while循环应该可以解决问题。

权限可能存在问题,直至server-config

还有另一种方法可以使用" exec"以递归方式运行它。命令。

你可以这样:

exec("chown -R ".$owner.":".$group." ".$folder);

这将更改文件夹和所有子文件夹的用户和组。但要注意, 使用系统是危险的"。您可以运行任何shell命令。不要玩太多。

答案 2 :(得分:0)

以下是3个选项:

  1. 使用suEXEC。
  2. 以用户dropbox的身份连接到localhost ftp,并以这种方式创建目录和文件。
  3. 设置sudo所以www-data用户可以在没有密码提示的情况下以root身份执行:sudo chown -R dropbox /path/to/dir,然后只使用php的exec函数。