2012-10-02 61 views
4

在我的服務器上,偶爾由腳本創建的腳本和緩存文件被PHP進程鎖定。一旦鎖定,他們就無法通過網絡共享,服務器本地或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);

在「高」磁盤操作量後(連續快速刷新頁面,一次刪除多個文件等),問題更爲普遍。它是運行在VM服務器上的IIS7和PHP 5.3.13(使用FastCGI)的Windows Server 2008 R2服務器,無病毒掃描程序,使用Web Platform Installer安裝PHP。 dxdiag

做一個iisreset暫時解決了這個問題。我正在編寫一個靜態網站生成功能,但每隔幾分鐘就會出現這個問題。

+0

有趣的問題。你也可以在http://serverfault.com/上試試你的運氣。 –

回答

-2

由於錯誤是說,該文件夾不是空的,所以不能被刪除。可能是因爲並非所有臨時文件都被刪除了。嘗試實現並使用遞歸函數...

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

此功能將刪除文件夾內的所有內容,然後將其刪除。

+0

謝謝,但這不是問題,我的代碼工作正常,問題與代碼無關(已在本服務器上的所有php項目上發生和關閉) – svandragt

+0

您還沒有閱讀過此問題。 OP聲明文件已被鎖定,不能被訪問,編輯或刪除。這就是問題所在,而不是錯誤發生的原因。 –

+0

好的,對不起。關閉wincache,如果你有它,可能會爲你工作。一些IIS安裝使用它有這種問題。 – Salketer

0

是否有可能您的腳本chdir() - 編輯到目錄?在Windows下,您不能刪除任何正在運行的進程的當前目錄。有時你可能會得到奇怪的消息(比如「目錄不爲空」),而真正的原因是存在與該目錄一起運行的進程。

我的想法是IIS使PHP進程保持活動狀態(因爲在Windows下,啓動新進程是重量級操作),因此池中未使用的進程阻止您刪除這些目錄。通過重新啓動IIS,可以終止池中的所有進程,使刪除成爲可能。

嘗試chdir()到您的PHP腳本末尾的默認目錄,並查看它是否有效。

+0

避免chdir()到任何目錄甚至更好。 – nagylzs

+0

不使用'chdir()',但我同意關於應用程序池的一般意見。 – svandragt

相關問題