Unlink нет файла php

Сценариев для удаления файла через PHP — масса. Например, это может быть временный файл, который создаётся при добавлении функционала регистрации на сайте. Или вы хотите заменить изображение товара на новое (перед загрузкой нового изображения потребуется удалить предыдущее). В перечисленных и других случаях на помощь придёт функция unlink.

Функция unlink() в PHP используется для удаления файла. Стандартно, происходит возврат TRUE — при успешной попытке и FALSE — при неуспешной.

Простой пример

unlink("myfile.txt"); // Удаление
  • file_path — используется для задания пути к объекту, который необходимо удалить. В случаях когда параметр содержит символическую ссылку — она автоматически удаляется.
  • context — используется для задания ресурса (по сути, это набор параметров и соответствующих опций, так называемый контекст). Параметр появился в PHP, начиная с пятой версии

В чем отличие от unset

В PHP unlink() — функция для работы с файловой системой, она используется для удаления файлов. Предположим, вы загрузили объект и хотите его удалить в дальнейшем, тогда unlink() вполне подойдёт (когда речь заходит о кодировке).

unset() — функция не для работы с файловой системой, а для управления переменными. Простыми словами, она делает переменную неопределенной, обнуляя её значение. Таким образом, unset() используется для уничтожения переменной в PHP.

На практике функция может использоваться для удаления одной переменной, нескольких переменных или элемента из массива.

 $file_pointer = "my.txt"; 
if (!unlink($file_pointer)) echo ("Файл не может быть удалён!");
> else echo ("Файл удален!");
>
?>
Файл не может быть удалён!

Изучение способов удаления принесет вам пользу в долгосрочной перспективе. Ну а чтобы пользы было ещё больше — успейте записаться на курс бэкенд-разработчик от Loft.

Читайте также:  Python простая нейронная сеть

Примеры

Давайте посмотрим разные сценарии: удаление единичного файла, объектов в папке и по их маске.

Удаление одного файла

Если на сервере существует единственный файл, который нужно стереть, можно использовать элементарную конструкцию:

*Обратите внимание, что путь указывается в следующем формате:

"/home/user/www/test.ru/blog/temlfile.html"

Таким образом, файл с именем tempfile.html, в результате выполнения, будет удалён.

Удаление всех файлов в папке

Удалить можно и все объекты внутри папки. Допустим: у нас есть папка с временными файлами. Пусть папка будет иметь условное название temp. Для удаление всех файловых объектов внутри неё вы можете использовать конструкцию вида:

array_map('unlink', glob(dirname(__FILE__).'/temp/*'));

В результате выполнения этого кода объекты, содержащиеся внутри этого пути, будут стерты:

Удаление по маске

Удалить через PHP можно также с учётом необходимой вам маски. Допустим, требуется удалить все файлы с расширением .TXT в какой-то конкретный директории. Используем конструкцию следующего вида

array_map('unlink', glob(dirname(__FILE__).'/temp/*txt'));

В результате все объекты внутри, имеющие расширение .TXT, будут стерты из папки temp.

Вывод

Вместо вывода — дадим ещё несколько примеров удаление через PHP, чтобы лучше закрепить тему.

Удаление существующего файлового объекта

Допустим, нам нужно удалить файл test.txt, если он существует. Мы реализовали этот сценарий следующим образом:

 //Назначим имя 
$filename = "test.txt";
//Проверим существование
if(file_exists($filename))
//Удалим
if (!unlink($filename)) echo ("
Во время удаления $filename file произошла ошибка");
>
else echo ("
The $filename файл был удален.");
>
>
else
echo "
The $filename файл не существует.";
?>
  • Для проверки наличия требуемого объекта мы используем функцию file_exists().
  • Если файл существует в текущем каталоге, он будет удален.
  • Если его не существует — PHP сообщит об ошибке.

Удаление всех файлов и папок из каталога

Каталог может включать в себя один или сразу несколько подкаталогов, внутри которых также могут содержаться файлы (либо папки]. Если нужно стереть какой-либо каталог, предварительно необходимо удалить все файлы внутри него. Представим подобный сценарий:

 //Установим путь к каталогу 
$dir_path = "test";
//Определим функцию для рекурсивного удаления каталога
Dir($path) //Проверим существование подкаталога
$files = glob($path . '/*');
//Проверим является ли значение файлом или папкой
foreach ($files as $file) is_dir($file) ? removeDir($file) : unlink($file);
>
//Удалим каталог
rmdir($path);
//Вернет TRUE
return 1;
>
//Проверим возвращаемое значение функции
if(removeDir($dir_path))
echo "Все файлы и папки, включенные в $dir_path директорию, были удалены.";
else
echo "Во время удаления произошла ошибка.";
?>
  • Чтобы удалить все папки и файлы, которые содержатся внутри каталога с названием temp, мы задействуем функцию removeDir().
  • Каталог будет автоматически стёрт сразу после того, как он станет пустым.

Удаление файла после создания

Допустим нам необходимо удалить файл с названием test.txt. Вот как это можно сделать:

 //Назначим имя 
$filename = "test.txt";
//Открываем для записи
$fh = fopen($filename, 'w+');
//Напишем какой-нибудь текст внутри
fwrite($fh, 'Добро пожаловать!');
fclose($fh);
//Проверим существует ли
if(file_exists($filename))
echo "
The $filename file exists.";
//Удалим
if(!unlink($filename)) echo ("
Во время удаления $filename file произошла ошибка");
>
else echo ("
Файл $filename был успешно удален.");
>
>
else
echo "
Файл $filename не найден.";
?>
  • Для проверки создания объекта применена функция file_exists().
  • Когда объект найден в указанном каталоге — он автоматически стирается.
  • Удаление происходит через функцию unlink().
  • Если объект в указанной директории не найден — вернётся ошибка.

Удаление всех файлов из определенного каталога

Допустим нам необходимо удалить все файлы из условного каталога, который называется «test/video». Вот как можно представить этот сценарий:

 //Установим путь к каталогу 
$dir_path = "test/video";
//Проведем поиск по всем файлам в указанном каталоге
foreach (glob($dir_path."/*.*") as $filename)
//Выведем имя и его размер
echo "
Название файла $filename";
echo "
Размер файла ".filesize($filename)." байт.";
//Удалим
if (!unlink($filename))
echo ("
Во время удаления файла $filename произошла ошибка.");
else
echo ("
Файл $filename был успешно удален.");
>
  • Как и в примере до этого, название и фактический размер выводятся непосредственно перед удалением.
  • Для маркировки разных видов расширений мы применили маску вида «*.*».

Хотите стать крутым и востребованным веб-разработчиком? У нас есть специализированный курс!

Источник

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

unlink возвращает ошибку: No such file or directory , но если я попробую header(«location: $file_delete»); это открывает файл (изображение в этом случае).

Решение

У меня та же проблема с этим (упрощенным) кодом:

Где $ file — абсолютный путь к файлу.

Следующая ошибка генерируется в производстве (у провайдера), а не при локальном тестировании:

Got error 'PHP message: PHP Warning: unlink(/xxxx/yyyy/zzzz/abcdefg.txt): No such file or directory in /xxxx/yyyyy/zzzzz/phpfile.php on line 1234' 

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

После некоторых исследований, unlink() похоже, не позволяет использовать относительные пути (с «../»).

$file_delete здесь абсолютный путь к файлу, который вы хотите удалить.

Напоминание: / используется для систем Unix, \ для Windows.

У меня также была такая же проблема с моим кодом. Что я сделал, чтобы решить эту проблему:

 var_dump($image_variable) // var_dump($file_delete) in your case. 

Выводит: string (23) (my-image-path)

Когда я начал считать строку, я нашел 22 символа. Я задавался вопросом, где 23-й?
Я проверил и тщательно просчитал, в конце я обнаружил, что в конце пути к моему изображению есть место. Поэтому я использовал функцию php trim () для удаления пробелов. Подобно,

 $trimed_path = trim($image_variable) // trim($file_delete) in your case. 

Мне понадобилось пару часов, чтобы разобраться. Как упоминалось выше, unlink () требователен к путям.

1-й) Определите путь (вот как WordPress это кстати):

define( 'ROOTPATH', dirname(dirname(__FILE__)) . '/' ); 
unlink(ROOTPATH.'public_html/file.jpg'); 

Источник

Оцените статью