【发布时间】:2013-09-24 01:54:09
【问题描述】:
我有 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"
- PHP-FPM 在用户“nginx”下运行
- NGINX 在用户“nginx”下运行
- /data/vmail 和所有子文件夹都归 vmail:vmail (chmod 770) 所有
存在补充组:
# groups nginx
nginx : nginx vmail
# groups vmail
vmail : vmail nginx
解决方案
- 如果我 chown
/data/vmail/test到 nginx:nginx 它的 contents 变成可删除的。但是/data/vmail/test仍然不是,只要/data/vmail属于 vmail:vmail 我想。 - 如果我
chmod -R 777 /data/vmail/test && chmod 777 /data/vmail意味着文件夹变为可删除。 - PHP 函数
rmdir()有效(不知道为什么)!但是大文件夹的递归删除太耗费资源了
我不认为这些选项是一种解决方案。此外,我不考虑涉及 root 用户和 /etc/sudoers 或以 root 身份运行 php-fpm 的解决方案。那么......如何才能让 /bin/rm 工作?
附加信息##
【问题讨论】:
-
您在启动 php-fpm 后是否更改了组所有权?万一……
标签: shell nginx permissions php