4

私のサーバーでは、スクリプトとスクリプトによって作成されたキャッシュ ファイルが PHP プロセスによってロックされることがあります。ロックされると、ネットワーク共有、サーバー上のローカル、または PHP 自体からアクセスできなくなります。ページを更新すると、アクセス拒否エラーが発生します。

Warning:  rmdir(C:\inetpub\wwwroot\mdblog\public\..\cache\posts\2012) 
[function.rmdir]: Directory not empty in
C:\inetpub\wwwroot\mdblog\public\system\Filesystem.php on line 52

52行目はrmdir($dir);.

この問題は、「大量」のディスク操作 (ページを連続してすばやく更新する、一度に多くのファイルを削除するなど) の後でより一般的になります。これは、IIS7 および PHP 5.3.13 (FastCGI を使用) を備えた Windows Server 2008 R2 サーバーであり、Web プラットフォーム インストーラーを使用して PHP がインストールされた VM サーバー上で実行され、ウイルス スキャナーはありません。dxdiag

を実行iisresetすると、問題が一時的に修正されます。静的サイト生成関数を作成していますが、この問題が数分ごとに発生します。

4

2 に答える 2

0

あなたのスクリプトがディレクトリにchdir()された可能性はありますか? Windows では、実行中のプロセスの現在のディレクトリを削除することはできません。時々、奇妙なメッセージ (「ディレクトリが空ではありません」など) が表示されることがありますが、本当の理由は、そのディレクトリを現在のディレクトリとして実行しているプロセスがあることです。

私の考えでは、IIS は PHP プロセスを維持し (Windows では、新しいプロセスを開始するのは負荷の高い操作であるため)、プール内の未使用のプロセスがこれらのディレクトリの削除を妨げているというものです。IIS を再起動すると、プール内のすべてのプロセスが強制終了され、削除が可能になります。

PHP スクリプトの最後にあるデフォルト ディレクトリに chdir() してみて、動作するかどうかを確認してください。

于 2012-10-02T13:45:44.227 に答える
-2

エラーの通り、フォルダが空ではないので消去できません。すべての一時ファイルが削除されたわけではない可能性があります。再帰関数を実装して使用してみてください...

function rrmdir($dir) {
    foreach(glob($dir . '/*') as $file) {
        if(is_dir($file))
            rrmdir($file);
        else
            unlink($file);
    }
    rmdir($dir);
}

この関数は、フォルダー内のすべてを削除してから削除します。

于 2012-10-02T13:40:59.017 に答える