PHP 5.4.4 を搭載した Windows Server 2008 R2 マシンで Apache HTTP サーバー 2.4 を実行しています。
E:\ドライブに次のディレクトリ構造があります。
E:\Dir1\Dir2\Dir3
上記の子ディレクトリを除いて、すべてのディレクトリ ( Dir1、Dir2およびDir3) は空です (ファイルはありません)。
削除Dir3してから、ディレクトリの内容を調べて、Dir2そこに何もないことを確認しようとしています。これをテストするために、次の PHP スクリプトを作成しました。
<?php
$currentDir = "E:\\Dir1\\Dir2\\Dir3";
$parentDir = dirname( $currentDir ); // Get the parent directory for Dir3.
rmdir ( $currentDir ); // Remove directory Dir3.
echo "<b>Current directory:</b> " . $currentDir . " <b><< I don't exist, I was just deleted.</b><br />";
echo "<b>Parent directory:</b> " . $parentDir. "<br />";
echo "<b>According to 'scandir', the parent directory contains:</b> ";
print_r( scandir( $parentDir, SCANDIR_SORT_NONE ) );
echo "<br /><br />";
?>
Windows エクスプローラーで開いていない場合Dir3、上記のスクリプトは完全に機能し、次の出力が表示されます。
現在のディレクトリ: E:\Dir1\Dir2\Dir3 << 存在しません。削除されました。
親ディレクトリ: E:\Dir1\Dir2
「scandir」によると、親ディレクトリには以下が含まれます: Array ( [0] => . [1] => .. )
ただし、Dir3Windows エクスプローラーで開くと、次の出力が得られます。
現在のディレクトリ: E:\Dir1\Dir2\Dir3 << 存在しません。削除されました。
親ディレクトリ: E:\Dir1\Dir2
「scandir」によると、親ディレクトリの内容: Array ( [0] => . [1] => .. [2] => Dir3 )
Dir3の内容の配列に が表示されることに注意してくださいDir2。言い換えれば、存在しないという事実を知っていても、それがまだ存在するscandir()と考えてDir3います (Windows エクスプローラーは私を に戻しますDir2)。
なぜこれが起こっているのか誰にも分かりますか?