2010-08-27 96 views
2

我想删除特定文件夹中的所有内容,但它似乎并没有影响子文件夹,但它应该,因为bash命令从控制台执行它。PHP的exec rm -Rf不工作的子目录

system('rm -Rf some_dir/*'); 
+0

它可能有事情做在bash扩展该星号。你真的想删除some_dir下面的所有文件而不删除它吗? – 2010-08-27 19:18:28

+3

有没有原因你不使用递归'unlink'和/或'rmdir'调用? '系统'似乎对我来说过分杀伤,当你不能总是保证它会对你有用... – prodigitalson 2010-08-27 19:21:12

+0

我创建了bash脚本,将第一个参数作为目录,然后用bash删除目录。 – 2010-08-27 19:21:58

回答

2

这个命令中没有必要用星号。如果您想要将目录与文件一起删除,请删除斜杠。离开斜线将删除文件,但保留目录。

还要检查这个页面的评论:http://php.net/manual/en/function.unlink.php

1

这可能是因为执行脚本的用户没有删除目录的权限,或者shell不在正确的目录中。

如果您通过apache运行此程序,则该进程可能由www-data拥有。如果“some_dir”目录不允许通过www-data进行写入访问,那么它将不起作用。

由于您使用的是相对路径(非常危险),因此您需要确保脚本在正确的目录中执行。如果可以的话,我建议你将路径改为绝对路径 - “rm -rf/path/to/some_dir”。

+1

我宁愿说apache和php脚本作为用户“nobody”运行。所以请确保“chown -R nobody:users DIRNAME”。 – nottinhill 2012-08-27 13:06:28