【发布时间】:2017-05-06 05:17:13
【问题描述】:
脚本完成后,我可以删除该文件,但在运行时我无法触摸它,即使在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': 文本文件忙
我也意识到这个脚本可能有点矫枉过正,但这纯粹是因为我无法让它以任何方式工作,并且一些额外的代码只是为了输出目的而尝试调试正在发生的事情。
【问题讨论】:
-
$Files的内容是什么?此外,您使用带有“r”模式的fopen进行读取,并且您稍后尝试删除该文件。您确定用户有权删除吗?可能是权限问题。尝试在没有任何其他代码的情况下执行unlink。 -
删除
unlink之前的@,这样你就可以让php告诉你失败的原因。另外,检查fclose的返回值。 -
@KodosJohnson 感谢您到目前为止对我的帮助,我将尝试您的
unlink完全不使用fopen,并且我在示例中添加了更多代码,希望我'我没有错过任何更重要的部分 -
@chiliNUT 我已经这样做了,我的 xdebug 输出给出了同样的错误
-
@KodosJohnson 如果我删除
fopen等,它会删除所有文件而没有任何问题。只有当我使用 PHP 脚本打开和关闭文件时,我才能再删除它
标签: php fopen unlink rm fclose