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

使用PHP脚本更改新创建目录的所有者和组,php,permissions,chown,Php,Permissions,Chown,运行debain LAMP的专用Linux服务器 我运行一个PHP脚本(使用浏览器),该脚本在同一服务器上的文件夹中创建一个目录(以及各种子目录),以便随后使用Dropbox共享使用。 目录是在/home/dropbox/New\u Project\u Name/New\u folders中创建的,应该由用户“dropbox”拥有 但是,运行php脚本会导致脚本生成的新创建目录归'www-data' 从浏览器运行php脚本以生成拥有用户和组“dropbox”所有权的新目录,或者随后运行脚本以检查

运行debain LAMP的专用Linux服务器

我运行一个PHP脚本(使用浏览器),该脚本在同一服务器上的文件夹中创建一个目录(以及各种子目录),以便随后使用Dropbox共享使用。
目录是在
/home/dropbox/New\u Project\u Name/New\u folders
中创建的,应该由用户“dropbox”拥有

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

从浏览器运行php脚本以生成拥有用户和组“dropbox”所有权的新目录,或者随后运行脚本以检查www数据所有权并递归地将文件和目录更改为“dropbox”,最好的原因是什么


非常感谢您的帮助。

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

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

权限可能存在问题,直至服务器配置

还有另一种使用“exec”命令递归运行它的方法

你可以这样做:

exec("chown -R ".$owner.":".$group." ".$folder);
这将更改文件夹和所有子文件夹的用户和组。但是要小心, 使用系统是“危险的”。您可以运行任何shell命令。不要玩得太多。

这里有3个选项:

  • 使用suEXEC
  • 作为用户dropbox连接到localhost ftp,并以这种方式创建目录和文件
  • 设置sudo,以便www数据用户可以以root用户身份执行此操作,而无需密码提示:
    sudo chown-R dropbox/path/to/dir
    ,然后只需使用php的
    exec
    函数即可

  • 好的-终于成功了(谢谢大家),但在我的/etc/sudoers中添加了以下内容

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

    PHP文件的内容与DasSaffe的回答一样

    非常感谢-但我猜由于服务器权限的原因,我得到了“不允许操作”。答案中的第一个变量应该是$user,而不是$username。是的,您是对的。我编辑了变量并给出了另一种解决itOK的方法——我正在尝试使用exec选项,正如您所示,但我试图理解如何授予脚本这样运行的权限。我已经在/etc/sudoers的底部添加了这一行。
    code
    nobody ALL=NOPASSWD:/home/user/public\u html/change\u owner.phpOK-最终实现了这一点(谢谢大家),但在我的/etc/sudoers`www data ALL=(ALL)NOPASSWD:/bin/chown中添加了以下内容,/home/sites/public_html/change_owner.php’php文件的内容如DasSaffechown($folder,$owner)的答案所示:根据仅适用于文件的
    www-data ALL=(ALL) NOPASSWD: /bin/chown, /home/sites/public_html/change_owner.php