ディレクトリが存在するかどうかをテストし、存在する場合は削除し、その上に新しいディレクトリを作成するコードのチャンクがあります。それはかなり単純なはずです。
if(is_dir($directory)){
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach($files as $fileinfo){
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
rmdir($directory);
//var_dump(is_dir($directory));
}
clearstatcache();
mkdir($directory,0744);
ディレクトリがまだ存在しない場合、問題なくmkdir()
動作します。しかし、ディレクトリが存在する場合、rmdir()
ループは機能しますが、PHP はエラーをスローします。
PHP Error[2]: mkdir(): Permission Denied
コメント行は、呼び出し後もvar_dump()
PHP がまだ$directory
ディレクトリであると認識していることを示しています。rmdir()
だから私はclearstatcache()
それを更新するために使用しますが、それでもディレクトリが削除されたことを検出しません。ファイルシステムで調べると、ディレクトリは実際には削除されています。
(ディレクトリがなくなっている間に) スクリプトを再度実行すると、問題なく動作します。
誰でもこのエラーを解決する方法を理解できますか? 違いがある場合は、これを Win7/XAMPP 開発環境で PHP コマンド ライン スクリプトとして実行しています。
編集:
答えてくれた Wee Kiat と Phillip に感謝します。unset($files)
解決策は、 beforeを使用rmdir()
して再帰イテレータを閉じることでした。この再帰イテレータはまだ開いたままになっており、チョーク$directory
の原因となっていました。mkdir()
以下のコードを参照してください。