Как удалить файл с сервера
Я использую dropzone.js. Когда я пытаюсь удалить файлы, удаляются только эскизы, но не файлы с сервера. Я пробовал некоторые способы, но он просто дает мне имя изображения, которое было на стороне клиента, а не имя на стороне сервера(оба имени разные, сохраняя имена в зашифрованном виде).
любая помощь была бы очень признательна..
то, как я справляюсь с этим, после того, как каждый файл загружен и сохранен на сервере, я эхом возвращаю имя, которое я даю файлу на моем сервере, и сохраняю его в объекте JS, что-то вроде этого:
С этим вы можете написать сценарий удаления в PHP, который принимает "serverFileName" и делает фактическое удаление, например:
Get response С сервера JSON формат или простая строка (тогда используйте только response вместо response.path ),
здесь сервер может вернуть json, как это,
Итак, мы храним это path на span что мы можем получить доступ, когда мы собираемся удалить.
после завершения процесса шаблон предварительного просмотра будет удален Dropzone вместе с путем файла, хранящимся в span .
самый простой способ
JS файл, этот скрипт будет работать при нажатии кнопки Удалить
файл php "удалить.на PHP"
файл будет удален при нажатии кнопки" Удалить":
поместите это в JS-файл или HTML-файл (или файл представления/действия PHP):
..и поместите этот код в свой PHP-файл:
надеюсь, это поможет вам бро :)
Я сделал проще, просто добавил новое свойство serverFileName объекту file:
в моем случае сервер отправляет ответ ajax с deleteUrl для каждого конкретного изображения. Я просто вставляю этот url как атрибут "data-dz-remove", уже установленный в previewTemplate.
Как я использую jquery это выглядит так:
Это простое решение будет работать для загрузки отдельных файлов, нет необходимости в манипуляции DOM.
PHP загрузить скрипт
JS Dropzones
JS за пределами Dropzone
когда вы сохраняете изображение в загрузке оттуда, вы должны вернуть новое имя файла:
echo json_encode (array ("Filename" = > "новое имя файла"));
и в dropzone.файл js:
и когда Dropzone инициализируется..
теперь вы получите новый файл изображения и вы можете удалить его с сервера
Удаляет файл filename . Функция похожа на функцию unlink() Unix в C. При неудачном выполнении будет вызвана ошибка уровня E_WARNING .
Список параметров
Если файл является символической ссылкой, символическая ссылка будет удалена. В Windows для удаления символической ссылки на каталог вместо этого должна использоваться функция rmdir() .
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
7.3.0 | В Windows теперь можно удалить файлы функцией unlink() с использованием дескрипторов, хотя раньше это не удавалось. Тем не менее, всё ещё невозможно повторно создать удалённый файл, пока все дескрипторы к нему не будут закрыты. |
Примеры
Смотрите также
User Contributed Notes 11 notes
This will delete all files in a directory matching a pattern in one line of code.
Deleted a large file but seeing no increase in free space or decrease of disk usage? Using UNIX or other POSIX OS?
The unlink() is not about removing file, it's about removing a file name. The manpage says: ``unlink - delete a name and possibly the file it refers to''.
Most of the time a file has just one name -- removing it will also remove (free, deallocate) the `body' of file (with one caveat, see below). That's the simple, usual case.
However, it's perfectly fine for a file to have several names (see the link() function), in the same or different directories. All the names will refer to the file body and `keep it alive', so to say. Only when all the names are removed, the body of file actually is freed.
The caveat:
A file's body may *also* be `kept alive' (still using diskspace) by a process holding the file open. The body will not be deallocated (will not free disk space) as long as the process holds it open. In fact, there's a fancy way of resurrecting a file removed by a mistake but still held open by a process.
unlink($fileName); failed for me .
Then i tried using the realpath($fileName) function as
unlink(realpath($fileName)); it worked
just posting it , in case if any one finds it useful .
Here the simplest way to delete files with mask
$mask = "*.jpg"
array_map ( "unlink" , glob ( $mask ) );
?>
I have been working on some little tryout where a backup file was created before modifying the main textfile. Then when an error is thrown, the main file will be deleted (unlinked) and the backup file is returned instead.
Though, I have been breaking my head for about an hour on why I couldn't get my persmissions right to unlink the main file.
Finally I knew what was wrong: because I was working on the file and hadn't yet closed the file, it was still in use and ofcourse couldn't be deleted :)
So I thought of mentoining this here, to avoid others of making the same mistake:
// First close the file
fclose ( $fp );
// Then unlink :)
unlink ( $somefile );
?>
To delete all files of a particular extension, or infact, delete all with wildcard, a much simplar way is to use the glob function. Say I wanted to delete all jpgs .
foreach ( glob ( "*.jpg" ) as $filename ) echo " $filename size " . filesize ( $filename ) . "\n" ;
unlink ( $filename );
>
This might seem obvious, but I was tearing my hair out with this problem - make sure the file you're trying to delete isn't currently being used. I had a script that was parsing a text file and was supposed to delete it after completing, but kept getting a permission denied error because I hadn't explicitly closed the file, hence it was technically still being "used" even though the parsing was complete.
To anyone who's had a problem with the permissions denied error, it's sometimes caused when you try to delete a file that's in a folder higher in the hierarchy to your working directory (i.e. when trying to delete a path that starts with "../").
So to work around this problem, you can use chdir() to change the working directory to the folder where the file you want to unlink is located.
$old = getcwd (); // Save the current directory
chdir ( $path_to_file );
unlink ( $filename );
chdir ( $old ); // Restore the old working directory
?>
On OSX, when fighting against a "Permission Denied" error, make sure, the directory has WRITE permissions for the executing php-user.
Furthermore, if you rely on ACLs, and want to delete a file or symlink, the containing directory needs to have "delete_child" permission in order to unlink things inside. If you only grant "delete" to the folder that will allow you to delete the container folder itself, but not the objects inside.
unlink works the same as the rm command on nix based loses or del command on windows, it will not resolve the file but remove the exact path given even if that path is just a link.
E.G
/var/www/test/index.php = symlink(/home/test/www/index.php)
unlink ( "/var/www/test/index.php" );
?>
Will just delete the link, not the original file where as
unlink ( "/home/test/www/index.php" );
?>
Will unlink the original file path and break the symlink, and allow the system to overwrite as the filesystem will not know of the file's location anymore.
The best way to delete files by mask is as follows:
array_walk ( glob ( '/etc/*' ), 'unlink' );
?>
Do not use array_map mentioned below - it's purpose is to process values in a given array AND COLLECT data returned by the callback function. So, array_map is slower and uses additional memory compared to array_walk.
Как и зачем нужно удалять файл через php? Если это можно сделать руками? Ну. это совсем примитивный вопрос. Если вы периодически встречаетесь с различными функциями, которые работают с файлами, то вы, наверное, знаете, что во многих местах может встречаться удаление файла php.
Всё об удалении файла через php
Где применяется удаление файла через php!?
Самое простое, где мы применяли удаление файла – это регистрация ,
Хотя о конкретном удалении файла мы там не говорили, но мы там говорили о создании временного файла с данными и вот его то нам м придется удалять и это уже будет в авторизации!
Можно ли заменить работу с фалом и работу в базе данных.
Например записать в базу данных, стереть в базе данных -> конечно можно, но как по мне, легче, для меня лично, записать в файл, потом удалить файл!
Функция которая удаляет файлы php -> unlink (синтаксис)
Как переводится unlink
Слово unlink переводится как - разъединять, отсоединить - довольно странно, поскольку эти слова только отдаленно напоминают удаление. файла!
Синтаксис unlink
Функция unlink, имеет два параметра -
Путь к файлу - filename Context -Замечание: Поддержка контекста была добавлена в PHP 5.0.0.
Возвращает TRUE в случае успешного завершения или FALSE.
Если файл лежит в той же папке, что и скрипт с функцией, то запись в скрипте может быть такая:
unlink("test.html"); Лучше всего использовать путь до файла на сервере ! Он всегда одинаковый!
И. И как-то мы делали стенд по удалению файла
Там по кнопке можно создать файл, а оптом удалить файл по нажатию на кнопку.
Самый простой скрипт удаления файла
Нам потребуется путь до корневой на сревре:
Еще нам потребуется путь_до_папки для удаления файла
И собственно файл, который будем удалять с помощью php
Соберем строку полностью по удалению файла и присвоим результат переменной:
И в результате, возврата, вернет либо true, либо false выводим результат удаления файла с помощью unlink
Код самого простого скрипта удаления файла php
Удаление файла по его адресу
Следующий скрипт удаления файла по его адресу не очень большой в смысле строк, но довольно большой в смысле, если описывать каждую строчку! Как было это сделано в третьем пункте!
Поэтому! -> только логика и немного описания.
В первое поле нужно вставить ссылку на файл на сайте, который хотим удалить!
И далее нажать "Удалить файл"
Как проверить работоспособность скрипта по удалению файла php!?
Скачиваем архив со скриптом по удалению файла php на сайте.
Нужно вытащить страницу из архива, и закачать в какую-то папку на сайте.
Создаем какую-то тестовую страницу, которую будем удалять, в любом месте на сайте.
Открываем её в браузере.
Копируем из адресной строки браузера адрес страницы.
Открываем страницу со скриптом по удалению файла также в браузере и вставляем в строку ввода -> ваш ранее скопированную строку тестовой страницы! И нажимаем удалить файл!
Удаление файла по выделенной радиоточке
Прежде чем начать опять очень долго объяснять каждую строчку в скрипте, но вкратце все же:
У нас есть рабочий пример, о котором дальше и пойдет речь, правда удаление отключено, а то вы мне тут поудаляйте весь сайт смайлы
Я не сижу и не выдумываю, какой же скрипт написать, большинство скриптов - это так или иначе были сделаны на основе или целиком на тех скриптах, которые я сам использую!
Предположим, что у вас есть какой-то список с файлами и вам нужно, чтобы была радиоточка напротив ссылки на файл -> далее, отметить радиоточку , нажать -> удалить файл -> файл удален. Это очень удобно.
Я не знаю, как у вас будет формироваться данный список -> это ваше дело, но у нас этот список формируется автоматически.
Мы взяли сформированную ссылку на файл и поместили в input с радиоточкой в value :
далее в цикле перебрали массив, который получился от функции scandir и к каждой строке с ссылкой добавляем этот инпут и у нас получается вот такое -> пример
После этого, выбираем тот файл, который требуется удалить, нажав по радиоточке и нажимаем удалить!
И собственно, скрипт, что и в пункте 4, который и удалит выделенный файл и отправленный через радиоточку value
Здравствуйте!
Столкнулась с такой проблемой: у меня есть файлы которые я сама добавила в папку и они спокойно удаляются при помощи actionDeletephoto, а вот если я загружаю файл через actionCreatephoto, то удаляется только запись из бд, а файл остается на сервере. Пожалуйста, подскажите, как решить данную проблему.
Контроллер:
- Вопрос задан более трёх лет назад
- 283 просмотра
Простой 9 комментариев
Добрый вечер.
Вынесите код удаления файла в отдельный метод и используйте в любом действии контролера.
Но странно, что Вы собираетесь удалять файл в действии actionCreatephoto.
slo_nik, просто я немного не так сформулировала, извините.
1. Загружаю картинку через actionCreatephoto
2. Удаляю её с помощью actionDeletephoto
3. Запись из бд удалена, а сам файл остаётся на сервере
Miri_Skava, проверьте путь к файлу, возможно Вы неверно его указали.
Удаление можно перенести, как посоветовал Antony Tkachenko, в модель, в метод beforeDelete().
Сделайте простую проверку
Если выйдет ошибка, то путь просто неверно указан.
Проконтролируйте путь, грубо, напрямую, убедитесь, что он верный.
Можно путь к файлу указать через Url::to(), без использования псевдонима.
slo_nik, выводится вот такой путь : D:\OpenServer\domains\yii2/frontend/web/img/image/1b6dbf2083972d16a1278383a939ba23.jpg
Но он выглядит по сути также, как и у тех картинок, которые были сохранены вручную в папке
И проверку не прошли только те картинки, которые были загружены с помощью кода
Miri_Skava, вручную или скриптом это не важно. Если он не находит изображения загруженные через скрипт, а загруженные вручную находит - значит проблема в другом.
Кстати, Вы из frontenda это делаете?
Попробуйте так
file_exists('img/image/'.$photo->name)
на сервере в корне есть папки public_shtml , public_html и другие
я создал папку /my-eror, изначально это была папка public_html, я ее переименовал в my-eror и создал новую public_html и внее закачал новые файлы
переименовал папку потому что в папке находятся файлы (2).htaccess, .htaccess - я хотел их обновить а они чего-то так "клонировались" и теперь я не могу их ни удалить , не переименовать, заархивировать - ничего не могу с ними сделать.
пытаюсь удалить папку получаю
пытаюсь изменить права для папки
но открыв опять атрибуты права не изменились.
переношу паку на компьютер, папка перенеслась но файлы в ней пустые 0кб, на сервере они по 150кб
пытаюсь удалить именно вложенные файлы
хочу изменить права
ЧТО ДЕЛАТЬ - КАК УДАЛИТЬ.
- Вопрос задан более двух лет назад
- 1534 просмотра
Сложный 5 комментариев
возможно у вас побилась логическая структура диска, как правило проверки с автоисправлением достаточно.
в линуксе есть несколько урвоней пра в давайте попробуем разобрать их
1 классическое 777 655 и тд тут все в теме
Так же есть собственно владельцы и группы именно они отвечают заперемещение вас из третей цифры во вторую и в первую. Они идут сразу за стандартными правами.
Специфические ческие права
SUID и SGID
ну и не забывайте что есть еще и сторонний софт который так же может ограничивать права.
например запрещять изменять название
запрещать ложить в эту папку файлы и директории
Разрешение только на дописывание и тд
Так же папку можно банально примнтрировать как устройство.
Какая у вас веб панель?
есть ли у вас ssh не sftp
Теперь разберем вариант в котором с правами у вас все хорошо
Есть на диске физические повреждения а есть логические
физические требуют замены диска логические требуют их устранить с помощью утилит.
У меня было пару раз такое
Виктор Таран, ssh есть, панель vesta, и меня бепокоит не вирус ли это, в коментарии к ответу писал, .
Здравствуйте!
*Вопрос №1 - как удалить.*
Для того, чтобы удалить директории, которые вы описали сделайте:
1. Войдите на сервер по SSH под root пользователем - используйте Putty программу.
2. Откройте Midnight Commander командой в Shell:
mc
3. Если команды mc нет - установите. Для Centos:
yum install mc -y
4. Откройте Midnigh commander, найдите и удалите нужную директорию нажав на F8.
*Вопрос №2 - как сделать так, чтобы заработало.*
Вы можете описать подробнее свой проект и вас смогут навести на решение.
Вероятно удаление директории не решит основную задачу, которая стоит перед вами.
Ну сайт(заглушка) как бы вроде работает нормально, я по крайней мере косяков пока не вижу (и эта не удаляемая папка так и висит), именно этот сайт был сайтом потом я его перенес на новый домен и из старого сделал заглушку с редиректом на новый сайт.
На сервере две папки public_shtml , public_html и другие, я обично в разных папках делаю "разные" сайты на public_shtml ставлю цмс а на public_html заглушку с редиректом на ССЛ, ТАК ВОТ эти неудаляемые файлы появились в папке public_html когда я хотел поменять хтасес с рекиректом на новый домен.
НО
на сервере 8 сайтов с разными пользователями/аккаунтами, и этот это один из них.
Читайте также: