PHP exec rm -Rf不能删除子目录问题

3

我正在尝试删除特定文件夹中的所有内容,但似乎不会影响子文件夹,但它应该会影响,因为bash命令可以从控制台执行。

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

这可能与bash扩展星号有关。您真的想要删除some_dir下面的所有文件而不将其删除吗? - Paul Tomblin
3
你为什么不使用递归的 unlink 和/或 rmdir 调用呢?在无法保证 system 可用性的情况下,它似乎对我来说有点过头了... - prodigitalson
我创建了一个Bash脚本,将第一个参数作为目录,并使用Bash删除目录。 - user171453
1
如果这是一个shell脚本,那么为什么需要PHP呢?在BASH中完成它就可以了 :-) - prodigitalson
你最终解决了这个问题吗? - hafichuk
2个回答

2

在这个命令中不需要使用星号。如果您想连同文件一起删除目录,请同时删除斜杠。保留斜杠将删除文件,但保留目录。

还要查看此页面上的注释:http://php.net/manual/en/function.unlink.php


1
对我不起作用。rm -R somedir/将删除带有文件的目录。 - Mikl

1

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

如果您通过apache运行此脚本,则该进程很可能由www-data拥有。如果“some_dir”目录不允许www-data进行写访问,则无法正常工作。

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


1
我更愿意说,Apache 和 PHP 脚本以用户“nobody”的身份运行。因此,请确保使用“chown -R nobody:users DIRNAME”命令更改目录所有者。 - Stephan Kristyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接