我正试图用这个脚本删除一个目录及其所有内容。。。
<?php
$app = $_POST['app'];
if (isset($_POST['app'])) {
$dir = "../apps/" . $app . "/";
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
}
?>
$post运行良好,脚本没有返回任何错误,只是没有删除目录。这可能与文件夹权限有关吗?我需要激活任何PHP扩展吗?
--编辑--链接的副本没有达到我想要的效果,我不知道如何更改它的代码。我正在删除客户端的一个目录,所以我不能使用__DIR__
,因为它保持了像这样的路径/test/app,我需要它们像这样''test''app。此外,代码不会删除文件夹,但会删除所有内容。我认为这与FilesystemIterator::SKIP_DOTS
线路有关。我也需要删除文件夹的代码,因为当用户再次安装应用程序时,由于文件夹重复,它将无法工作。
工作代码:
<?php
$app = $_POST['app'];
if (isset($_POST['app'])) {
$dir ="../apps/" . $app;
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
$file->isDir() ? rmdir($file) : unlink($file);
}
rmdir($dir);
}
?>
Gordon给我发的链接帮助我找到了答案。
这是我的新工作代码。
<?php
$app = $_POST['app'];
if (isset($_POST['app'])) {
$dir ="../apps/" . $app;
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
$file->isDir() ? rmdir($file) : unlink($file);
}
rmdir($dir);
}
?>