Я написал небольшой php-скрипт для очистки, который должен автоматически удалять список файлов на моем сервере. Список файлов представляет собой простой текстовый файл («3.txt»), который содержит одну запись в каждой строке.
Формат 3.txt:
folder/filename1.fileending
folder/filename2.fileending
folder/filename3.fileending
folder/filename4.fileending
По какой-то причине скрипт, похоже, правильно читает список файлов, но удаётся только успешно удалить самый последний файл («folder / filename4.fileending»). Я предполагал, что разрыв строки может все испортить и отфильтровать это безрезультатно. Я также пытался использовать разрыв строки Unix, также безуспешно.
Сценарий очистки:
<?php
$cleanlist = fopen("3.txt", "r") or die("Unable to open file list!");
while(!feof($cleanlist)) {
$temp = rtrim(fgets($cleanlist), "\r\n");
if(!file_exists($temp))
{
echo ("Error deleting "). $temp . "<br>";
}
else
{
unlink($temp);
echo ("Deleted ") . $temp . "<br>";
}
}
fclose($cleanlist);
?>
Я также попытался поместить «unlink ($ temp)» за оператором If, чтобы он выполнялся каждый раз, когда в самом условии есть ошибка, но результат был точно таким же. Я в своем уме. У кого-нибудь есть идея, почему мой скрипт не может успешно удалить файл, сохраненный для последнего в списке?
Обновление: теперь скрипт работает на ровном месте! Я предполагаю, что мой хостинг-провайдер сыграл роль в этом … или, возможно, нет. Тем не менее, спасибо всем, кто внес свой вклад. Это был мой самый первый php-скрипт, и благодаря вашим предложениям я многое узнал о трассировке ошибок в php 🙂
Не совсем ответ, просто совет по использованию файла и foreach.
Как я уже сказал в своем комментарии, я думаю, что вы предпринимаете некоторые ненужные шаги. file()
помещает каждую строку файла в массив для вас и делает это довольно легко.
$list = file('3.txt');
if ($list === false) {
die('Cannot open file');
}
foreach($list as $file) {
if (unlink($file)) {
echo ("Deleted ") . $file . "<br>";
}
else {
echo ("Error deleting "). $file. "<br>";
}
}
// Zero out file?
#file_put_contents('3.txt', '');
Я надеюсь, что вы убедитесь, что 3.txt имеет ограниченные возможности записи, или вы делаете его относительным путем. В противном случае я вижу какие-то злые намерения.
Других решений пока нет …