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();

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