fopen — 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() и с помощью команд оболочки, и ни одна из них не работает, оба дают мне эту ошибку:

рм: не могу удалить
‘Непобедимый-file.csv’:
Текстовый файл занят

Я также понимаю, что сценарий может быть немного излишним, но это только потому, что я не смог заставить его работать каким-либо образом, а часть дополнительного кода только для целей вывода, чтобы попытаться отладить происходящее.

8

Решение

Я сталкивался с этой проблемой раньше и смог исправить ее путем принудительного сбора мусора после закрытия файла и перед его удалением:

gc_collect_cycles();

Это далеко не лучшее решение, но оно действительно решило проблему, связанную с удалением ранее открытых и закрытых файлов.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]