在我的服务器上,脚本创建的脚本和缓存文件偶尔会被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);
。
在“大量”磁盘操作(连续快速刷新页面,一次删除多个文件等)后,问题更为普遍。它是一台Windows Server 2008 R2服务器,带有IIS7和PHP 5.3.13(使用FastCGI),在VM服务器上运行,没有病毒扫描程序,使用Web平台安装程序安装PHP。 dxdiag
执行iisreset
暂时解决问题。我正在编写一个静态站点生成函数,但每隔几分钟就会出现这个问题。
答案 0 :(得分:0)
您的脚本chdir()是否可能编辑到目录?在Windows下,您无法删除任何正在运行的进程的当前目录。有时您可能会收到奇怪的消息(例如“目录不为空”),而真正的原因是有进程以该目录作为当前进程运行。
我的想法是IIS保持PHP进程活着(因为在Windows下,启动新进程是繁重的操作),因此池中未使用的进程阻止您删除这些目录。通过重新启动IIS,可以终止池中的所有进程,从而使删除成为可能。
尝试将chdir()发送到PHP脚本末尾的默认目录,看看它是否有效。
答案 1 :(得分:-2)
正如错误所说,文件夹不为空,因此无法删除。可能是因为并非所有临时文件都被删除了。尝试实现并使用递归函数......
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file))
rrmdir($file);
else
unlink($file);
}
rmdir($dir);
}
此功能将删除文件夹中的所有内容,然后将其删除。