在我的脚本完成后,我可以删除该文件,但在脚本运行时,即使使用
fclose()
,我也不能操作该文件。以下是我正在尝试使用的代码:
在我的脚本完成后,我可以删除该文件,但在脚本运行时,即使使用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:无法删除 'invincible-file.csv': 文本文件正忙
我也意识到脚本可能有点过度设计,但那纯粹是因为我无论如何都无法让它工作,而一些额外的代码只是用于输出目的,以尝试调试正在发生的事情。
$Files
的内容是什么?此外,您使用“r”模式的fopen
进行读取,并尝试稍后删除文件。您确定用户有权限删除吗?也许这是一个权限问题。尝试只执行unlink
而不包含其他代码。 - Cave Johnsonunlink
前面的@
,这样你就可以让 PHP 告诉你它为什么失败了。同时,检查fclose
的返回值。 - chiliNUT