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] => .. )
ただし、Dir3
Windows エクスプローラーで開くと、次の出力が得られます。
現在のディレクトリ: E:\Dir1\Dir2\Dir3 << 存在しません。削除されました。
親ディレクトリ: E:\Dir1\Dir2
「scandir」によると、親ディレクトリの内容: Array ( [0] => . [1] => .. [2] => Dir3 )
Dir3
の内容の配列に が表示されることに注意してくださいDir2
。言い換えれば、存在しないという事実を知っていても、それがまだ存在するscandir()
と考えてDir3
います (Windows エクスプローラーは私を に戻しますDir2
)。
なぜこれが起こっているのか誰にも分かりますか?