Php удалить файл windows

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

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

А начну я с 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.’);

Дело в том, что в файловой системе 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() (изменяет текущий каталог на указанный) , например:

Читайте также:  Как можно удалить ошибки windows

$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() , которая отпускает занятый семафора. Если семафор не отпустить, то параллельный поток останется в состоянии ожидания вплоть до окончания работы текущего. Поэтому функция и должна быть вне условия.

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

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

Как удалить файл с сайта с помощью php, функция unlink, примеры использования

Поддержи проект.

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

Всё об удалении файла через php

  1. Где применяется удаление файла через php!?
  2. Функция которая удаляет файлы php -> unlink (синтаксис)
  3. Самый простой скрипт по удалению файла
    1. Код самого простого скрипта удаления файла php
    2. Скачать в архиве
  4. Удаление файла по его адресу -> из формы
    1. Пример, как это выглядит
    2. Скачать в архиве
  5. Удаление файла по выделенной радиоточке
    1. Пример, как это выглядит
    2. Скачать в архиве
  6. Удаление файла с помощью unlink видео
  7. Ошибка E_WARNING при удалении файла unlink

    Где применяется удаление файла через php!?

    Можно ли заменить работу с фалом и работу в базе данных.

    Например записать в базу данных, стереть в базе данных -> конечно можно, но как по мне, легче, для меня лично, записать в файл, потом удалить файл!

    Функция unlink, имеет два параметра —

    Путь к файлу — filename Context -Замечание: Поддержка контекста была добавлена в PHP 5.0.0.

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

    Если файл лежит в той же папке, что и скрипт с функцией, то запись в скрипте может быть такая:

    unlink(«test.html»); Лучше всего использовать путь до файла на сервере ! Он всегда одинаковый!
    И. И как-то мы делали стенд по удалению файла
    Там по кнопке можно создать файл, а оптом удалить файл по нажатию на кнопку.

    Самый простой скрипт удаления файла

    Нам потребуется путь до корневой на сревре:

    Еще нам потребуется путь_до_папки для удаления файла

    И собственно файл, который будем удалять с помощью php

    Соберем строку полностью по удалению файла и присвоим результат переменной:

    И в результате, возврата, вернет либо true, либо false выводим результат удаления файла с помощью unlink

    Код самого простого скрипта удаления файла php

    Удаление файла по его адресу

    Страница пример(он же в архиве) и мы можем видеть два поля input, одно поле ввода, другое тип submit(отправить)

    В первое поле нужно вставить ссылку на файл на сайте, который хотим удалить!

    И далее нажать «Удалить файл«

    Как проверить работоспособность скрипта по удалению файла php!?

    Скачиваем архив со скриптом по удалению файла php на сайте.

    Нужно вытащить страницу из архива, и закачать в какую-то папку на сайте.

    Создаем какую-то тестовую страницу, которую будем удалять, в любом месте на сайте.

    Открываем её в браузере.

    Копируем из адресной строки браузера адрес страницы.

    Открываем страницу со скриптом по удалению файла также в браузере и вставляем в строку ввода -> ваш ранее скопированную строку тестовой страницы! И нажимаем удалить файл!

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

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

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

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

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

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

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

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

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

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

    How to delete a file via PHP?

    How do I delete a file from my server with PHP if the file is in another directory?

    Here is my page layout:

    • projects/backend/removeProjectData.php (this file deletes all my entries for the database and should also delete the related file)
    • public_files/22.pdf (the place where the file is located.)

    I’m using the unlink function:

    But this always gives me an error that the file does not exist. Any ideas?

    6 Answers 6

    The following should help

    • realpath — Returns canonicalized absolute pathname
    • is_writable — Tells whether the filename is writable
    • unlink — Deletes a file

    Run your filepath through realpath, then check if the returned path is writable and if so, unlink it.

    Check your permissions first of all on the file, to make sure you can a) see it from your script, and b) are able to delete it.

    You can also use a path calculated from the directory you’re currently running the script in, eg:

    (in PHP 5.3 I believe you can use the __DIR__ constant instead of dirname() but I’ve not used it myself yet)

    You can delete the file using

    but if you are deleting a file from it’s http path then this unlink is not work proper. You have to give a file path correct.

    AIO solution, handles everything, It’s not my work but I just improved myself. Enjoy!

    I know this question is a bit old, but this is something simple that works for me very well to delete images off my project I’m working on.

    The dirname(__FILE__) section prints out the base path to your project. The /img/tasks/ are two folders down from my base path. And finally, there’s my image I want to delete which you can make into anything you need to.

    With this I have not had any problem getting to my files on my server and deleting them.

    Not the answer you’re looking for? Browse other questions tagged php file-io or ask your own question.

    Linked

    Hot Network Questions

    Subscribe to RSS

    To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

    site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.4.16.39093

    By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

    Удаление файлов с помощью php

    Есть папка images , в ней 100000 файлов. 10000 нужно удалить. Имена файлов известны.

    Чтобы удалить один файл:

    Чтобы удалить несколько, думала будет так:

    Но удаляется только последний указанный файл из files.txt .

    Что нужно подправить, чтобы все удалились?

    6 ответов 6

    Попробуйте так. Вообще косяк только в отсутствии trim() , так как функция file() разбивает текст по \n , соответственно пробелы-табуляции и виндовское \r остается в предполагаемом имени файла. Но пути /images/123.jpg\r естественно нет) Ну и оптимизация — нехорошо грузить массив из 10000 строк в память при наличии другого способа.

    Как понимаю, имена всех файлов, которые надо удалить, лежат здесь: ‘./files.txt’ Так вот, функция file() читает файл не построчно, а целостно, то есть одним фрагментом. Данная функция практически идентична file_get_contents() . Чтобы удалить все файлы, надо сначала прочитать содержимое ‘./files.txt’ , а затем разбить его построчно на фрагменты (1 фрагмент = 1 имени файла). Сделать это можно с помощью регулярок, но еще легче так:

    UPD:

    Но даже после этих маниуляций препроцессор PHP выдаст вам сообщение об ошибке! Это произойдет потому, что 10000 файлов не смогут удалиться в течение установленного лимита( по умолчанию = 30 сек.). Тут вам уже придется подумать и понять, что можно разбить удаление файлов на 3-5 шагов (1 шаг = 1 обновление страницы) и в каждом шаге удалять 10000/n файлов(n — кол-во шагов).

    Читайте также:  Ноутбук lenovo ставим windows
Оцените статью