0

ボタンをクリックすると、その中のファイルと追加のディレクトリを含むディレクトリを削除しようとしていますが、問題が発生しています。

私が受け取るエラーは -

PHP 致命的なエラー:メッセージ「RecursiveDirectoryIterator::__construct( http://...@alink.co.uk/ ): dir を開くことができませんでした:実装されていません」というメッセージを含む例外「UnexpectedValueException」をキャッチできませんでした

そして、これが関連するコードのセクションです-

$dir = 'http://www.thisismylink.co.uk/userfolder/' . $row['email'] . "/";
    $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($it,
                RecursiveIteratorIterator::CHILD_FIRST);
    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }
    rmdir($dir);

現在、構造は -

ユーザーの電子メール ($dir)

  • ピクチャー
    • 画像.png
  • ビデオ
    • ビデオ.mp4

私がしたいのは、「ユーザー電子メール」ディレクトリ内のすべてと「ユーザー ディレクトリ」自体も削除することです。

4

2 に答える 2

1

トップディレクトリとして完全なURLを使用しているようです。そうではありませんか:

$dir = 'userfolder/' . $row['email'] . "/"; //Relative to your script
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
            RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
    if ($file->isDir()){
        rmdir($file->getRealPath());
    } else {
        unlink($file->getRealPath());
    }
}
rmdir($dir);
于 2015-03-01T13:53:18.610 に答える
0

これは、問題を処理するためのかなり危険な方法です。実際の質問を回避しようとしているわけではありませんが、データベースを「ディレクトリ」とそれらが関連付けられている人でいっぱいに保つことを検討してください. ユーザーを削除するときは、データベースのフラグを「toBeRemoved」などに設定します。

次に、時々、cron /スケジュールされたタスクを実行し、削除するディレクトリのリストを照会してから、データベースエントリを削除する/更新済みとしてマークします。

問題は、どれほど安全であると信じていても、スクリプトが悪用されたり、Web/ユーザー ベースの入力から予測できない結果が生成されたりする可能性があることです。

これらのエラーが許可ベースの場合、上記の考え方を使用すると、悪意のあるユーザー (または善意のユーザー) によってコードが破壊されてシステム ファイルが削除されることを恐れずに、「ルート」ユーザー レベルでこれを実行できます。イベントの間違った組み合わせに当たる)。

于 2015-03-01T13:55:00.737 に答える