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

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

Как удалить файл с моего сервера с помощью PHP если файл находится в другой директории?

вот мой макет страницы:

  • projects/backend/removeProjectData.php (этот файл удаляет все мои записи для базы данных, а также должен удалить связанный файл)
  • public_files/22.pdf (место, где находится этот файл.)

Я использую unlink функция:

но это всегда дает мне ошибку, что файл не существовать. Есть идеи?

6 ответов

следующее должно помочь

  • realpath — возвращает канонизированный абсолютный путь
  • is_writable — говорит ли именем запись
  • unlink — удаляет файл

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

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

вы также можете использовать путь, рассчитанный из каталога, в котором вы сейчас запускаете скрипт, например:

(в PHP 5.3 я считаю, что вы можете использовать __DIR__ константы вместо dirname() но я еще не использовал его сам)

вы можете удалить файл с помощью

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

решение AIO, обрабатывает все, это не моя работа, но я просто улучшил себя. Наслаждайтесь!

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

на выводит базовый путь к вашему проекту. The /img/tasks/ две папки вниз с моего пути. И, наконец, есть мой образ, который я хочу удалить, который вы можете сделать во все, что вам нужно.

С этим у меня не было никаких проблем с получением моих файлов на моем сервере и удалением их.

Читайте также:  В устройстве подачи нет бумаги при сканировании

(PHP 4, PHP 5, PHP 7)

unlink — Удаляет файл

Описание

Удаляет файл filename . Функция похожа на функцию unlink() Unix C. В случае ошибки будет сгенерирована ошибка уровня E_WARNING .

Список параметров

Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.0.0 Начиная с версии PHP 5.0.0, функция unlink() также может быть использована с некоторыми обёртками URL. Обратитесь к Поддерживаемые протоколы и обработчики (wrappers) для получения списка обёрток, которые поддерживают unlink() .

Примеры

Пример #1 Пример простого использования unlink()

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

PHP функция unlink()

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

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

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

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

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

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

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

Читайте также:  Как переводится софт с английского на русский

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

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

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

В данном случае переменная среды $_ENV[‘WINDIR’] может служить маркером использования Windows-платформы, а проверка выполнения удаления файла осуществляется через php-функцию file_exists() , которая осуществляет проверку существования файла.

Как удалить файл(ы) в PHP?

В некоторых случаях может получиться и так, что функция unlink() не будет иметь доступа к удалению файла, т.е. получаем ошибку [function.unlink]: permission denied. Это может быть связано с неправильно указанным путём к файлу или отсутствием прав доступа.

Интересным вариантом для работы с путями к файлу является использование php-функций getcwd() (получает имя текущего рабочего каталога) и chdir() (изменяет текущий каталог на указанный) , например:

$file_path = ‘path/to’;
$file_name = ‘/2014/04/file.txt’;
$old = getcwd();
if ( !(@chdir($file_path)) ) die(‘Error open path.’);
if ( !(@unlink($file_name)) ) die(‘Error Delete File.’);
chdir($old);

Как вы видите, так в чём-то проще ориентироваться и отследить проблему. В тоже время, будет не лишним, после выполнения удаления вернуться в текущий каталог $old .

Что же до проблем доступа, то здесь можно попробовать использовать php-функцию chmod() (изменяет режим доступа к файлу) , например:

Читайте также:  Биокерамика в микроволновке что это

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

Если Вам необходимо удалить все файлы в директории удобно использовать комбинацию из php-функций array_map() (применяет callback-функцию ко всем элементам массива) и glob() (находит файловые пути, совпадающие с шаблоном) , например:

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

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

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

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

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

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

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

Никто ещё не оставил комментариев, станьте первым.

Ссылка на основную публикацию
Как создать словарь в word
Меня интересует вот такая тема: когда печатаешь текст на компе, например, с ошибкой правописания, появляется подсказка - как правильно надо....
Как сделать кроссворд в ворде 2010
Пользоваться файлами, созданными в MS Office, можно как угодно: открыть документ Ворд онлайн, составить в Экселе квартальный отчёт или в...
Как сделать местный разрез
Основным назначением видов является определение формы внешних поверхностей предмета. Выявление на видах формы внутренних поверхностей при помощи штриховых линий не...
Как создать таблицу на компьютере
Как создать таблицу в Word? Сейчас я просто не представляю, как можно работать без такой нужной и полезной программы, как...
Adblock detector