Как удалить файл в php?

Содержание:

  • HTML
    • Что такое HTML
    • <!DOCTYPE>
    • Мета теги в <head>
    • Тег <base>
    • Текст в html
    • HTML списки
    • Ссылки
    • Картинки на сайте
    • Таблицы
    • Фреймы
    • Формы
    • DHTML
    • Музыка
    • Видео
    • Карты изображений
    • SVG карты
    • Графика в HTML
    • SSI .shtml
    • Таблица цветов RGB
    • Правильноесочетание цветов
    • Таблица«безопасных»цветов
    • Таблица символов
    • Примеры HTML, CSS
  • CSS
    • Таблицы стилей CSS
    • Свод стилей
    • Псевдоклассы CSS
    • Псевдоэлементы CSS
    • CSS-градиент
    • Flexbox
    • Адаптивная верстка
    • @media screen
  • JavaScript
    • Описание языка
    • Методы и функции
    • Объекты
    • Строки
    • Формы
    • Фреймы и окна
    • Регулярныевыражения
    • Условнаякомпиляция
    • Примеры скриптов
    • Отладка
    • Оптимизация
    • Игры на JS
    • CSS из JS
  • PHP + MySQL
    • Введение в PHP
    • Основы языка
    • Использованиемассивов
    • $_server
    • Создание функций
    • Строки
    • Функции работысо строками
    • Объектноепрограммирование
    • Формы
    • Файлы
    • Загрузка файлов на сервер
    • MySQL
      • Дата, время MySQL
      • Вопросы по MySQL
    • Cookie
    • htaccess
    • Безопасность
    • Сессии
    • Отправка почты
    • Кэширование
    • Дата, время
    • Математическиефункции
    • Дополнительныевозможности
    • Регулярныевыражения
    • Библиотека Curl
    • IMAP, POP3, NNTP
    • Оптимизация
    • Примеры скриптов
  • XML + XSLT
  • AJAX
    • Знакомство с Ajax
    • ОбъектXMLHttpRequest
    • СозданиеAjax-приложения
    • Отправка формы
    • Области применения
    • Ajax примеры
    • АльтернативныеAjax-у методы
    • Ошибки Ajax
    • Навигация на AJAX
  • Графика CorelDRAW
    • Типы графики
    • Пакет CorelDRAW GS
    • Зимняя картинка
    • Осколок стекла
  • SEO
    • Анализ сайта
    • WEB продвижение(оптимизация)
    • Информацияо домене
    • Информация обIP-адресе
    • Ping поисковыхсистем
    • Robots.txt
    • meta Robots
    • Каталоги ипоисковики
    • Особенности SAPE
    • Page Rank
    • Сервис созданияссылок
    • О Контекстнойрекламе
  • Сервисы
  • Разное
    • Движки сайтов (CMS)
    • Хостинг
    • Настройка DNS
    • ADSL
    • RSS
    • ActiveX и HTML
    • Паролированиестраницы
    • HTTP коды
    • HTTP протокол
    • HTTP заголовки
    • Прячем ссылки
    • Черный списоксайтов
    • ☭ Заработокв интернете
    • Термины иопределения
    • Продажа доменов
    • НастройкиЯндекс-почты
    • Кнопки социалок
    • Настроки SIPв телефоне
    • Созданиепоискового плугина
    • Сервискоротких ссылок
    • Telegram: бот, ссылки.
    • Друзья
    • Статьи Liex
    • Задания к л/р
    • Примерызачетных задач
  • Статьи, обзоры
    • Шаблоны сайтов
    • Новости

PHP функция unlink()

А начну я с php-функции , которая и осуществляет удаление файла:


bool unlink( string $filename [, resource $context ] )

Здесь  – путь к файлу, а  (не обязательно) – описание контекстов для работы с потоками (поддерживается в PHP, начиная с 5.0.0). Функция возвращает  в случае успешного завершения или  в случае возникновения ошибки.

Пример использования php-функции unlink():

$filename = ‘./path/to/file.txt’;if ( !(@unlink($filename)) ) die(‘Error Delete File.’);

Почему эта функция называется unlink()?

Дело в том, что в файловой системе Unix имеется различие между физическим расположением файлов на носителе и соответствующей структурой каталога. Поэтому при сохранении файла в определенной точке файловой системы эта точка дерева каталогов связывается с физическим местом хранения данных файла. Другими словами, путь к файлу в Unix, фактически, представляет собой уникальных идентификатор для одного из этих узлов.

Примечательно здесь и то, что в Unix можно связать несколько таких точек с одними и теми же данными. Таки данные будут существовать до тех пор, пока существует хотя бы одна ссылка на них. Но если все ссылки будут уничтожены, то и сами данные будут уничтожены. Таким образом, функция  предназначена для удаления именно ссылок, и уже как следствия данных файла.

В Windows такого нет и функция  удаляет именно файл. Более того, некоторые версии PHP для Windows вообще не поддерживают . В таком случае используется команда  через  или , например:

$filename = ‘/2014/04/file.txt’;if ( isset($_ENV) ) {  @exec(‘del ‘. $filename);  if ( file_exists($filename) ) die(‘Error Delete File.’);} else if ( !(@unlink($filename)) ) {  die(‘Error Delete File.’);}

В данном случае переменная среды  может служить маркером использования Windows-платформы, а проверка выполнения удаления файла осуществляется через php-функцию , которая осуществляет проверку существования файла.

Решение проблемы многопоточности при удалении файлов

Гораздо сложнее, когда речь заходит о крупных сайтах, где велико количество одновременных запросов (потоков) к скрипту. Здесь существует ряд решений. Я же приведу лишь одно из них, основное на использовании семафоров.

Как таковой, семафор служит своеобразным маркером процесса. При захвате семафора одним процессом, его значение уменьшается на единицу, а при отпускании — увеличивается на единицу. При этом, если текущее значение семафора равно нулю, процессу не удастся его захватить и он будет ожидать освобождения семафора.

Для получения ресурса семафора используется функция . Функцией можно получить семафор со значением, отличающимся от единицы, и тогда захватить семафор смогут несколько потоков. Для захвата используется функция . Пример:

$sem = sem_get(1);if ( sem_acquire($sem) && file_exists($filename) ) @unlink($filename);sem_remove($sem);

Обратить внимание на то, что здесь используется дополнительная проверка на существование файла. Дело в том, что когда первый поток захватит семафор, удалит файл и отпустит семафор, второй поток сможет продолжить выполнение без удаления файл, которого уже нет

Важную роль здесь играет функция , которая отпускает занятый семафора. Если семафор не отпустить, то параллельный поток останется в состоянии ожидания вплоть до окончания работы текущего. Поэтому функция и должна быть вне условия.


На этом у меня всё. Надеюсь, что моя статья была Вам полезна или просто познавательно

Спасибо за внимание. Удачи!

Поиск функций PHP

Произведен поиск по ключевому слову dir. Результаты поиска приведены ниже:

Найденная функция Описание функции
cpdf_set_font_directories()
Устанавливает директории поиска при установке внешних шрифтов
closedir()
Освободить дескриптор каталога
chdir()
Сменить каталог
dbplus_chdir()
Получает/устанавливает виртуальную текущую директорию БД
directoryiterator_construct()
Constructs a new dir iterator from a path
directoryiterator_current()
Return this (needed for Iterator interface)
directoryiterator_getatime()
Get last access time of file
directoryiterator_getchildren()
Returns an iterator for the current entry if it is a directory
directoryiterator_getctime()
Get inode modification time of file
directoryiterator_getfilename()
Return filename of current dir entry
directoryiterator_getgroup()
Get file group
directoryiterator_getinode()
Get file inode
directoryiterator_getmtime()
Get last modification time of file
directoryiterator_getowner()
Get file owner
directoryiterator_getpath()
Return directory path
directoryiterator_getpathname()
Return path and filename of current dir entry
directoryiterator_getperms()
Get file permissions
directoryiterator_getsize()
Get file size
directoryiterator_gettype()
Get file type
directoryiterator_isdir()
Returns true if file is directory
directoryiterator_isdot()
Returns true if current entry is » or »
directoryiterator_isexecutable()
Returns true if file is executable
directoryiterator_isfile()
Returns true if file is a regular file
directoryiterator_islink()
Returns true if file is symbolic link
directoryiterator_isreadable()
Returns true if file can be read
directoryiterator_iswritable()
Returns true if file can be written
directoryiterator_key()
Return current dir entry
directoryiterator_next()
Move to next entry
directoryiterator_rewind()
Rewind dir back to the start
directoryiterator_valid()
Check whether dir contains more entries
dirname()
Возвращает имя каталога из указанного пути
fam_monitor_directory()
Monitor a directory for changes
ftp_chdir()
Изменяет текущую директорию на FTP сервере
ftp_mkdir()
Создаёт директорию
ftp_rmdir()
Удаляет директорию
gopher_parsedir()
Translate a gopher formatted directory entry into an associative array
iis_get_dir_security()
Gets Directory Security
iis_set_dir_security()
Sets Directory Security
maxdb_fetch_field_direct()
Fetch meta-data for a single field
mysqli_fetch_field_direct()
Fetch meta-data for a single field
pspell_config_data_dir()
Location of language data files
pspell_config_dict_dir()
Location of the main word list
readdir()
Получить элемент каталога по его дескриптору
recursivedirectoryiterator_getchildren()
Returns an iterator for the current entry if it is a directory
recursivedirectoryiterator_haschildren()
Returns whether current entry is a directory and not » or »
recursivedirectoryiterator_key()
Return path and filename of current dir entry
recursivedirectoryiterator_next()
Move to next entry
recursivedirectoryiterator_rewind()
Rewind dir back to the start
rewinddir()
Сбросить дескриптор каталога
scandir()
Получить список файлов и каталогов, расположенных по указанному пути
ssh2_sftp_mkdir()
Create a directory
ssh2_sftp_rmdir()
Remove a directory
opendir()
Открыть каталог
is_dir()
Определает, является ли файл директорией
mkdir()
Создаёт директорию
rmdir()
Удаляет директорию

Итого найдено: 56 функций, содержащих ключевое слово dir.

17 ответов

573 Лучший ответ

Если вы хотите удалить скрытые файлы, такие как .htaccess, вы должны использовать

04 янв. 2011, в 13:52 Поделиться 222

Если вы хотите удалить все из папки (включая подпапки), используйте эту комбинацию , и :

Обновить

Этот вызов также может обрабатывать пустые каталоги — спасибо за подсказку, @mojuba!

20 нояб. 2012, в 09:41 Поделиться 84

Вот более современный подход, используя Стандартную библиотеку PHP (SPL).

03 июль 2014, в 22:05 Поделиться 67

04 янв. 2011, в 15:33 Поделиться 19

Этот код из http://php.net/unlink:

04 янв. 2011, в 15:01 Поделиться 14

04 янв. 2011, в 15:29 Поделиться 11

См READDIR и разъединить.

04 янв. 2011, в 15:01 Поделиться 9

Предполагая, что у вас есть папка с большим количеством файлов, читающих их все, а затем удаление в два этапа не выполняется. Я считаю, что наиболее эффективным способом удаления файлов является просто использование системной команды.

Например, в linux я использую:


Или это, если вы хотите рекурсивное удаление без необходимости писать рекурсивную функцию

те же самые точные команды существуют для любой ОС, поддерживаемой PHP. Имейте в виду, что это способ удаления файлов. $absolutePathToFolder ДОЛЖЕН быть проверен и защищен перед запуском этого кода, и разрешения должны быть предоставлены.

27 сен. 2015, в 04:52 Поделиться 8

Простой и лучший способ удалить все файлы из папки в PHP

Получите этот исходный код отсюда — http://www.codexworld.com/delete-all-files-from-folder-using-php/

21 июнь 2016, в 08:06 Поделиться 4

Функция unlinkr рекурсивно удаляет все папки и файлы в указанном пути, убедившись, что она сама не удаляет script.

если вы хотите удалить все файлы и папки, в которые вы помещаете этот script, затем выполните его как

если вы хотите просто удалить только файлы php, а затем вызвать его как

вы также можете использовать любой другой путь для удаления файлов.

Это приведет к удалению всех файлов в каталоге home/user/temp.

20 нояб. 2015, в 08:12 Поделиться 4

Другое решение: Этот класс удаляет все файлы, подкаталоги и файлы в подкаталогах.

17 июль 2014, в 14:13 Поделиться 3

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

Для использования:

Чтобы скопировать (или переместить) один файл или набор папок/файлов:


Удалите один файл или все файлы и папки в пути:

Рассчитайте размер одного файла или набора файлов в наборе папок:

01 фев. 2013, в 06:12 Поделиться 1

Для меня решение с было лучшим и работало как шарм. С функция не работала в некоторых сценариях.

16 фев. 2018, в 03:38 Поделиться 1

19 нояб. 2015, в 06:28 Поделиться

Там есть пакет под названием «Pusheh», который поможет вам полностью удалить каталог (ссылка на Github). Он также доступен на Packagist.

Например, если вы хотите очистить каталог , вы можете сделать:

Если вам интересно, посмотрите вики.

25 янв. 2019, в 16:09 Поделиться

29 окт. 2018, в 14:31 Поделиться

Я обновил ответ @Stichoza, чтобы удалить файлы через подпапки.

17 окт. 2014, в 13:48 Поделиться

Ещё вопросы

  • 1048Как мне сделать редирект в PHP?
  • 779Определение типа запроса в PHP (GET, POST, PUT или DELETE)
  • 632Как рассчитать разницу между двумя датами с помощью PHP?
  • 542Создать папку, если она еще не существует
  • 489Могу ли я связать массив с условием IN ()?
  • 450Преобразование целого числа в строку в PHP
  • 356Pretty-Printing JSON с PHP
  • 355Показать число до 2 десятичных знаков
  • 321Сохранение изображения из PHP URL
  • 279Конвертировать один формат даты в другой в PHP

Удаление файла по выделенной радиоточке

Прежде чем начать опять очень долго объяснять каждую строчку в скрипте, но вкратце все же:

У нас есть рабочий пример, о котром дальше и пойдет речь, правда удаление отключено, а то вы мне тут поудаляйте весь сайт

И он же ->

В чем разница между 4 и 5 пунктами!?

Я не сижу и не выдумываю, какой же скрипт написать, большинство скриптов — это так или иначе были сделаны на основе или целиком на тех скриптах, которые я сам использую!

Предположим, что у вас есть какой-то список с файлами и вам нужно, чтобы была радиоточка напротив ссылки на файл -> далее, отметить радиоточку , нажать -> удалить файл -> файл удален… Это очень удобно.

Я не знаю, как у вас будет формироваться данный список -> это ваше дело, но у нас этот .

Мы взяли сформированную ссылку на файл и поместили в с радиоточкой в value :

<input type=»radio» name=»radio» value=»‘. $http.$folder_scan.'»>

далее в цикле перебрали массив, который получился от функции scandir и к каждой строке с ссылкой добавляем этот инпут и у нас получается вот такое -> пример

После этого, выбираем тот файл, который требуется удалить, нажав по радиоточке и нажимаем удалить!

И собственно, скрипт, что и в , который и удалит выделенный файл и отправленный через радиоточку value

Нам понадобится:

1). Данные из value: $THE_URL = strip_tags($_POST); 2). Данные домена: $DOMEN = $_SERVER.’://’.$_SERVER; 3). Путь до корневой на сервере $HOME = $_SERVER; 4). заменяем домен на путь на сервере: $DIR_DELITE_PAGE = str_replace($DOMEN , $HOME , $THE_URL ) ; 5). Проверяем если есть файл if(file_exists( $DIR_DELITE_PAGE )) -> удаляем файл :$file_delite = unlink($DIR_DELITE_PAGE); 6). И в зависимости от результат выводим сообщение


С этим читают