1

特定のファイルとフォルダーの配列を除いて、Webホスティング上のすべてのファイルとディレクトリを削除する関数を作成しようとしています

function cleanUp($exdirs, $exfiles){
$it = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator('.'), 
  RecursiveIteratorIterator::CHILD_FIRST
);
foreach($it as $entry) {
  if ($entry->isDir() && !in_array($entry->getBasename(), $exdirs)) {
    rmdir($entry->getPathname());
  }
  else {
    if (!in_array($entry->getFileName(), $exfiles)) {
      unlink($entry->getPathname());
    }
    else {
      $exdirs[] = dirname($entry->getFileName());
    }
  }
}
}

そして、この関数を次のように呼び出します

$excludeDirsNames = array('cgi-bin');
$excludeFileNames = array('.htaccess', 'ws.zip', 'update.php');
cleanUp($excludeDirsNames , $excludeFileNames);

問題は、削除してもエラーメッセージが表示されることです:Directory not empty on line rmdir($entry->getPathname());数回。その問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

ファイルとディレクトリを除外できますが、以前に除外された他のファイルまたはディレクトリがディレクトリに含まれているかどうかはテストしません。

if (substr($oneExcludedFileOrDirectory, 0, strlen($currentDir) === $currentDir) {
  echo "Directory not empty";
}

簡単なプレフィックスの比較:「dir」は、除外されたパスのいずれかのプレフィックスですか? 絶対パス(およびその他のマイナーなもの)でのみ機能しますが、説明する必要があります。

于 2011-10-07T09:49:25.557 に答える
0

それが機能しない2つの理由は次のとおりです。

1)子フォルダの1つに、除外するファイルがあります。削除されていないため、フォルダを「rm」することはできません。

2)「unlink」と「rmdir」の後-Funktionは「clearstatcache();」を呼び出します。これで問題は解決すると思います。ファイルは削除されますが、情報は引き続きキャッシュにあります。

于 2011-10-07T09:56:57.453 に答える