我的脚本完成后,我可以删除该文件,但在它运行时我无法触及它,即使在fclose()
。这是我尝试使用的代码:
$Files = glob("$_SERVER[DOCUMENT_ROOT]/files/*.csv");
$File = fopen($Files[0], "r");
//while (($Data = fgetcsv($File)) !== false) {...
$i = 0;
while (is_resource($File)) {
$i && sleep(1);
echo "Closing handle.\n";
fclose($File);
if (++$i > 5)
die("Could not close handle.");
}
foreach ($Files as $File) {
$i = 0;
while (file_exists($File)) {
$i && sleep(1);
echo "Deleting file.\n";
@unlink($File);
echo 'www-data@debian:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command);
if (++$i > 5)
die("Could not delete the file.");
}
}
正如你所看到的,我正在尝试通过删除它unlink()
并使用 shell 命令,但两者都不起作用,都给我这个错误:
rm:无法删除
'无敌文件.csv':
文本文件忙
我还意识到该脚本可能有点矫枉过正,但这纯粹是因为我无法让它以任何方式工作,并且一些额外的代码只是用于输出目的,以尝试和调试正在发生的事情。
我以前遇到过这个问题,并且能够通过在关闭文件后和取消链接之前强制进行垃圾回收来解决:
gc_collect_cycles();
到目前为止,这不是最好的解决方案,但它确实解决了我删除之前打开和关闭的行的文件的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)