PHP не может отключить файл после 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()
и с помощью команд оболочки и ни один из них не работает, оба дают мне эту ошибку:
rm: не удается удалить непобедимый-файл.КШМ': Текстовый файл занят
Я также понимаю, что сценарий может быть немного излишним, но это просто потому, что я никак не мог заставить его работать, и некоторые дополнительные коды просто для выходных целей, чтобы попытаться отладить то, что происходит.
1 ответов
я столкнулся с этой проблемой раньше и смог исправить, заставив сборку мусора после закрытия файла и перед его отсоединением:
gc_collect_cycles();
далеко не лучшее решение, но оно решило проблему, которую я удалил файлы, которые ранее были открыты и закрыты.