PHP Unlink не работает

Я пытаюсь удалить фотографию в php, используя unlink. Я использовал его ранее на другом сервере, но на этот раз он не работает. Я использовал абсолютный путь для теста, но все еще не работает:

Я использовал его как: unlink('img1.jpg');

а также :

unlink('http://www.mysite.com/img1.jpg');

Пожалуйста, у кого есть такой опыт?


person Sunil    schedule 26.09.2013    source источник
comment
Вы не можете удалить, используя URL-адрес. Вы пробовали указать полный путь к файловой системе, например /var/www/mysite.com/img1.jpg?   -  person Maerlyn    schedule 26.09.2013
comment
Есть ли ошибка? Возможно, у вас нет прав на удаление этого файла или файл находится где-то еще на сервере. unlink с адресом http://... не будет работать, вы должны использовать путь к серверу.   -  person Jojo    schedule 26.09.2013
comment
Я использовал его как: unlink('img1.jpg'); но не работает   -  person Sunil    schedule 26.09.2013
comment
вставьте это http://www.mysite.com/img1.jpg в свой браузер и проверьте, появляется ли изображение, если не ВАШ ПУТЬ ЗАПИСАН   -  person Moeed Farooqui    schedule 26.09.2013
comment
Я уверен, что не делаю синтаксической ошибки, потому что я использовал его на сайте, который раньше работал нормально. Есть ли проблема с сервером?   -  person Sunil    schedule 26.09.2013
comment
У меня была такая же проблема прямо сейчас. Отключение или переименование с абсолютным путем, например. /home/test/someFile.txt и filePermissions 777 не работали. Я только что добавил строку chmod($fileName, 777); перед отсоединением/переименованием, и это сработало. Я не знаю почему, но даже когда мой файловый браузер сказал мне, что разрешения 777, они, похоже, не были 777.   -  person Ello    schedule 25.08.2015


Ответы (7)


URL запрещен в функции ulink

не могли бы вы использовать это

Лучше и с точки зрения безопасности использовать абсолютный путь. Но вы можете получить этот путь динамически.

Например. с использованием:

getcwd();

В зависимости от того, где находится ваш PHP-скрипт, ваша переменная может выглядеть так:

$deleteImage =  getcwd() . 'img1.jpg';

unlink($deleteImage);

Проверь это

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

а также

имя файла
Путь к файлу.

Таким образом, он только принимает строку в качестве имени файла.

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

person Shakti Patel    schedule 26.09.2013
comment
Да, работаю с getcwd(), но я не знаю, почему не с абсолютным путем. В любом случае, спасибо Патель. Рег, Сунил - person Sunil; 26.09.2013

Несмотря на то, что функция unlink() поддерживает URL-адреса (см. здесь), сейчас http:// не поддерживается: http://ch2.php.net/manual/en/wrappers.http.php

используйте путь файловой системы для удаления файла.

person Davide De Santis    schedule 26.09.2013

unlink($fileName); у меня не получилось.
Затем я попробовал использовать функцию realpath($fileName), так как unlink(realpath($fileName)); она сработала.

Просто опубликую это, на случай, если кто-то найдет это полезным.

отмена ссылки php

person sameh salah    schedule 26.04.2019

Если вы используете unlink в Linux или Unix, вы также должны проверить результаты is_writable (string $filename ) И если функция возвращает false, вы должны проверить права доступа к файлу с помощью fileperms (string $ имя файла ).

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

Если это проблема, вы должны сделать

chmod o+rwd img1.jpg

or

chmod 777 img1.jpg

предоставить другим пользователям права на запись (и удаление).

person Radon8472    schedule 26.09.2013

используйте путь файловой системы,
сначала определите путь следующим образом:

define("WEB_ROOT",substr(dirname(__FILE__),0,strlen(dirname(__FILE__))-3));

и проверьте, существует ли файл или нет, если он существует, отсоедините файл.

$filename=WEB_ROOT."img1.jpg";
if(file_exists($filename))
{
$img=unlink(WEB_ROOT."img1.jpg");
}
person DS9    schedule 26.09.2013

unlink не будет работать с unlink('http://www.mysite.com/img1.jpg');

используйте вместо этого unlink($_SERVER['DOCUMENT_ROOT'].'img1.jpg');//берет текущий каталог или,

unlink($_SERVER['DOCUMENT_ROOT'].'dir_name/img1.jpg');

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

person Rajeev Ranjan    schedule 26.09.2013

Укажите относительный путь от папки, в которой хранятся изображения, до файла, в котором вы пишете скрипт. Если структура файла такая:

-your php file
-images
  -1.jpg

then 

unlink(images/1.jpg);

Или может быть проблема с правами доступа к папке. Ваши файлы находятся на сервере или вы запускаете его на локальном хосте? Если он находится на сервере, дайте разрешение 755 на папку с изображениями.

person Tirthankar Kundu    schedule 26.09.2013