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 服务器,在 VM 服务器上运行,没有病毒扫描程序,使用 Web 平台安装程序安装了 PHP。诊断

做一个iisreset暂时解决问题。我正在编写一个静态站点生成功能,但是每隔几分钟就会出现这个问题。

4

2 回答 2

0

您的脚本 chdir() 是否有可能被编入目录?在 Windows 下,您不能删除任何正在运行的进程的当前目录。有时您可能会收到奇怪的消息(例如“目录不为空”),而真正的原因是存在以该目录作为当前目录运行的进程。

我的想法是 IIS 使 PHP 进程保持活动状态(因为在 Windows 下,启动新进程是重量级操作),因此池中未使用的进程会阻止您删除这些目录。通过重新启动 IIS,您可以终止池中的所有进程,从而使删除成为可能。

尝试 chdir() 到 PHP 脚本末尾的默认目录,看看它是否有效。

于 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 回答