Как удалить файл через PHP: функция unlink
Для чего удалять файл через PHP
Сценариев для удаления файла через PHP — масса. Например, это может быть временный файл, который создаётся при добавлении функционала регистрации на сайте. Или вы хотите заменить изображение товара на новое (перед загрузкой нового изображения потребуется удалить предыдущее). В перечисленных и других случаях на помощь придёт функция unlink.
Функция unlink (синтаксис)
Функция unlink() в PHP используется для удаления файла. Стандартно, происходит возврат TRUE — при успешной попытке и FALSE — при неуспешной.
Простой пример
unlink("myfile.txt"); // Удаление
Синтаксис
unlink(file_path, context)
Параметры
-
file_path — используется для задания пути к объекту, который необходимо удалить. В случаях когда параметр содержит символическую ссылку — она автоматически удаляется.
-
context — используется для задания ресурса (по сути, это набор параметров и соответствующих опций, так называемый контекст). Параметр появился в PHP, начиная с пятой версии
В чем отличие от unset
В PHP unlink() — функция для работы с файловой системой, она используется для удаления файлов. Предположим, вы загрузили объект и хотите его удалить в дальнейшем, тогда unlink() вполне подойдёт (когда речь заходит о кодировке).
unset() — функция не для работы с файловой системой, а для управления переменными. Простыми словами, она делает переменную неопределенной, обнуляя её значение. Таким образом, unset() используется для уничтожения переменной в PHP.
На практике функция может использоваться для удаления одной переменной, нескольких переменных или элемента из массива.
Пример:
<?php
$file_pointer = "my.txt";
if (!unlink($file_pointer)) {
echo ("Файл не может быть удалён!");
} else {
echo ("Файл удален!");
}
?>
Вывод:
Файл не может быть удалён!
Изучение способов удаления принесет вам пользу в долгосрочной перспективе. Ну а чтобы пользы было ещё больше — успейте записаться на курс бэкенд-разработчик от Loft.
Примеры
Давайте посмотрим разные сценарии: удаление единичного файла, объектов в папке и по их маске.
Удаление одного файла
Если на сервере существует единственный файл, который нужно стереть, можно использовать элементарную конструкцию:
unlink($filepath)
*Обратите внимание, что путь указывается в следующем формате:
"/home/user/www/test.ru/blog/temlfile.html"
Таким образом, файл с именем tempfile.html, в результате выполнения, будет удалён.
Удаление всех файлов в папке
Удалить можно и все объекты внутри папки. Допустим: у нас есть папка с временными файлами. Пусть папка будет иметь условное название temp. Для удаление всех файловых объектов внутри неё вы можете использовать конструкцию вида:
array_map('unlink', glob(dirname(__FILE__).'/temp/*'));
В результате выполнения этого кода объекты, содержащиеся внутри этого пути, будут стерты:
(glob(dirname(__FILE__).'/temp/*'))
Удаление по маске
Удалить через PHP можно также с учётом необходимой вам маски. Допустим, требуется удалить все файлы с расширением .TXT в какой-то конкретный директории. Используем конструкцию следующего вида
array_map('unlink', glob(dirname(__FILE__).'/temp/*txt'));
В результате все объекты внутри, имеющие расширение .TXT, будут стерты из папки temp.
Вывод
Вместо вывода — дадим ещё несколько примеров удаление через PHP, чтобы лучше закрепить тему.
Удаление существующего файлового объекта
Допустим, нам нужно удалить файл test.txt, если он существует. Мы реализовали этот сценарий следующим образом:
<?php
//Назначим имя
$filename = "test.txt";
//Проверим существование
if(file_exists($filename))
{
//Удалим
if (!unlink($filename)) {
echo ("<br />Во время удаления $filename file произошла ошибка");
}
else {
echo ("</br>The <b>$filename</b> файл был удален.");
}
}
else
echo "<br />The <b>$filename</b> файл не существует.";
?>
Примечание:
-
Для проверки наличия требуемого объекта мы используем функцию file_exists().
-
Если файл существует в текущем каталоге, он будет удален.
-
Если его не существует — PHP сообщит об ошибке.
Удаление всех файлов и папок из каталога
Каталог может включать в себя один или сразу несколько подкаталогов, внутри которых также могут содержаться файлы (либо папки]. Если нужно стереть какой-либо каталог, предварительно необходимо удалить все файлы внутри него. Представим подобный сценарий:
<?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. Вот как это можно сделать:
<?php
//Назначим имя
$filename = "test.txt";
//Открываем для записи
$fh = fopen($filename, 'w+');
//Напишем какой-нибудь текст внутри
fwrite($fh, 'Добро пожаловать!');
fclose($fh);
//Проверим существует ли
if(file_exists($filename))
{
echo "<br />The <b>$filename</b> file exists.";
//Удалим
if(!unlink($filename)) {
echo ("<br />Во время удаления $filename file произошла ошибка");
}
else {
echo ("<br />Файл <b>$filename</b> был успешно удален.");
}
}
else
echo "<br />Файл <b>$filename</b> не найден.";
?>
Примечания:
-
Для проверки создания объекта применена функция file_exists().
-
Когда объект найден в указанном каталоге — он автоматически стирается.
-
Удаление происходит через функцию unlink().
-
Если объект в указанной директории не найден — вернётся ошибка.
Удаление всех файлов из определенного каталога
Допустим нам необходимо удалить все файлы из условного каталога, который называется "test/video". Вот как можно представить этот сценарий:
<?php
//Установим путь к каталогу
$dir_path = "test/video";
//Проведем поиск по всем файлам в указанном каталоге
foreach (glob($dir_path."/*.*") as $filename)
{
//Выведем имя и его размер
echo "<br />Название файла <b>$filename</b>";
echo "<br />Размер файла <b>".filesize($filename)."</b> байт.";
//Удалим
if (!unlink($filename))
echo ("<br />Во время удаления файла <b>$filename</b> произошла ошибка.");
else
echo ("<br />Файл <b>$filename</b> был успешно удален.");
}
Примечания:
-
Как и в примере до этого, название и фактический размер выводятся непосредственно перед удалением.
-
Для маркировки разных видов расширений мы применили маску вида "*.*".
Хотите стать крутым и востребованным веб-разработчиком? У нас есть специализированный курс!