0

このスクリプトを使用して、ディレクトリとそのすべての内容を削除しようとしています...

<?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);
}
?>
4

1 に答える 1

1

@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);
}
?>
于 2013-07-21T22:32:31.703 に答える