是什么导致PHP锁定文件
在我的服务器上,脚本创建的脚本和缓存文件偶尔会被PHP进程锁定。一旦锁定,它们就无法通过网络共享、服务器本地或PHP本身进行访问。刷新页面会导致访问被拒绝错误:是什么导致PHP锁定文件,php,windows,iis,Php,Windows,Iis,在我的服务器上,脚本创建的脚本和缓存文件偶尔会被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
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和PHP5.3.13(使用FastCGI),运行在虚拟机服务器上,无病毒扫描程序,使用Web平台安装程序安装PHP
执行iisreset
可暂时修复该问题。但是,我正在编写一个静态站点生成函数,这会导致每隔几分钟出现一次此问题。正如错误所说,文件夹不是空的,因此无法擦除。可能是因为没有删除所有临时文件。尝试实现并使用递归函数
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file))
rrmdir($file);
else
unlink($file);
}
rmdir($dir);
}
此函数将删除文件夹中的所有内容,然后再将其删除。是否可能将脚本chdir()插入目录?在Windows下,您不能删除任何正在运行的进程的当前目录。有时,您可能会收到奇怪的消息(如“directory not empty”),而真正的原因是,有些进程将该目录作为当前目录运行
我的想法是IIS使PHP进程保持活动状态(因为在Windows下,启动新进程是一项繁重的操作),因此池中未使用的进程会阻止您删除这些目录。通过重新启动IIS,您可以杀死池中的所有进程,从而使删除成为可能
尝试将chdir()添加到PHP脚本末尾的默认目录中,看看它是否有效。谢谢,但这不是问题所在,我的代码工作正常,问题与代码无关(在该服务器上的所有PHP项目上都会时断时续地出现)。您还没有阅读该问题。OP表示文件已锁定,无法访问、编辑或删除。这是问题,不是为什么会发生错误。好吧,对不起。关掉wincache,如果你有它,可能对你有用。一些使用它的IIS安装有这样的问题。有趣的问题。您可能也想试试运气。最好避免chdir()-ing到任何目录。不要使用chdir()
,但我同意关于应用程序池的一般评论。