Удаление файлов и папок в PHP
PHP – куда больше, чем просто язык для обработки различных форм обратной связи на сайтов. Одним из примеров использования, который подойдёт начинающим вебмастерам, выступает работа с файлами. В частности, речь идёт об удалении документов и директорий с сервера, возможном с помощью встроенного в язык набора функций.
Обзор функции
Прежде всего стоит обратить внимание на супермассив $_SERVER, который содержит в себе элементы, нужные для работы с файлами. Речь идёт о конкретно $_SERVER[‘DOCUMENT_ROOT’], который возвращает абсолютный путь сервера. Под этим термином подразумевается расположение папки public_html, в которую помещается видимое пользователям содержимое ресурса, с точки зрения сервера. То есть, просто скопировать URL из адресной строки браузера не выйдет.
Сам процесс удаления производится с помощью unlink(). Учтите, что влияние этой функции распространяется только на файлы, а не на директории. Для работы с каталогами следует задействовать rmdir(), которая срабатывает, только если в папке нет никаких документов.
Для директории должны быть выставлены соответствующие разрешения, позволяющие удалять её содержимое (например, можно выставить 0777 для полного доступа в системе). В любом случае, вам сначала потребуется программного или вручную удалить содержимое папки. С помощью кода с задействованием scandir() можно сделать это, представив название файлов в директории в виде массива, и потом обработав их с помощью rmdir().
Учтите, что настройки безопасности системы не дадут вам удалить некоторое содержимое. Посредством PHP нельзя не только убрать файлы при отсутствии соответствующего кода разрешения (например, при 0000), но и очистить системные каталоги.
Тем не менее, можно будет сделать это через функцию exec(), которая вводит команды прямо в терминал ОС, но, к сожалению, является запрещённой во многих веб-хостингах. Это делается из соображений безопасности. Если же сайт находится на собственном VDS, можно отключить блокировку exec() посредством конфигурации PHP. При этом команды будут отличаться в зависимости от операционной системы.
Для самого простого пользования unlink() достаточно указать путь к файлу, как в примерах ниже. У него, как и у rmdir(), есть ещё и второй аргумент $context, однако его задействование необязательно и нужно лишь в довольно редких случаях.
Примеры использования
Удаление файла с проверкой
Поскольку unlink() возвращает true при успешном выполнении, а false и ошибку класса E_WARNING при неудаче, можно проверить результат выполнения посредством if-elseif-else.
<?
$delete=unlink($_SERVER[‘DOCUMENT_ROOT]’.»/test.txt»);# удаление файла test.txt
if($delete==true){
echo»Файл удалён»;
}else{
echo»Файл не удалён».
}
Удаление директории с проверкой
Аналогично – и с папками.
<?
$delete=$_SERVER[‘DOCUMENT_ROOT’].»/test»;# Удаление папки test
if($delete==true){
echo»Папка удалена»;
}else{
echo»Папка не удалена»;
}
