После завершения моего скрипта я могу удалить файл, но пока он работает, я не могу его коснуться даже после fclose()
. Вот код, который я пытаюсь использовать:PHP не может отсоединить файл после 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 '[email protected]:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command);
if (++$i > 5)
die("Could not delete the file.");
}
}
Как вы можете видеть, что я не пытаюсь удалить его через unlink()
и с помощью команд оболочки и ни работаю, оба даете мне эту ошибку:
rm: cannot remove 'invincible-file.csv': Text file busy
Я также понимаю, что сценарий может немного переборщить, но это потому, что я не мог заставить его работать каким-либо образом, а некоторые из дополнительного кода предназначены только для вывода, чтобы попробовать и отладить то, что происходит.
Что такое содержимое '$ Files'? Кроме того, вы используете 'fopen' с режимом« r »для чтения, и вы пытаетесь удалить файл позже. Вы уверены, что пользователь имеет разрешение на удаление? Возможно, это вопрос разрешения. Попробуйте выполнить 'unlink' без какого-либо другого кода. –
Удалите '@' перед 'unlink', чтобы вы могли позволить php рассказать вам, почему это не удалось. Также проверьте возвращаемое значение 'fclose'. – chiliNUT
@KodosJohnson Спасибо, что помогли мне до сих пор, я собираюсь попробовать «unlink» без «fopen» вообще, и я добавил еще пример кода, надеюсь, что я не пропущу более важных частей –