我有nginx + php-fpm,我需要从php-script中递归删除文件夹:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
$out = shell_exec('/bin/rm -vrf /data/vmail/test');
var_dump($out);
$ out为NULL,但在error.log中我收到
WARNING: [pool www] child 7210 said into stderr: "rm: "
WARNING: [pool www] child 7210 said into stderr: "cannot remove `/data/vmail/test'"
WARNING: [pool www] child 7210 said into stderr: ": Permission denied"
存在补充组:
# groups nginx
nginx : nginx vmail
# groups vmail
vmail : vmail nginx
/data/vmail/test
chown到nginx:nginx,内容将变为可删除。但/data/vmail/test
仍然不是,只要/data/vmail
归vmail所有:我想是vmail。chmod -R 777 /data/vmail/test && chmod 777 /data/vmail
意味着文件夹变为可删除。rmdir()
有效(不知道为什么)!但是大型文件夹的递归删除太耗费资源我不认为这些选项是一种解决方案。此外,我不考虑涉及root用户和/etc/sudoers
或以root身份运行php-fpm的解决方案。那么......如何让/ bin / rm工作?
答案 0 :(得分:1)
删除目录内容是目录中的写入操作。因此,运行PHP的用户需要/ data / vmail的写权限。