unlink PHP работает, когда файл находится в корне, а не в папке

Итак, это довольно просто. Я хочу удалить файл на сервере с помощью PHP, у меня есть:

$myfile = 'theone.png';
unlink($myfile);

Этот код удаляет файл, однако, если путь к файлу /images/theone.png, он не работает, я пробовал images\theone.png безуспешно.

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

Спасибо, парни!


person Rik89    schedule 22.04.2014    source источник
comment
Вы пробовали /images/theone.png или images/theone.png?   -  person kelunik    schedule 22.04.2014
comment
Можете ли вы показать структуру и точное «я» (лишь небольшую часть), которое используется?   -  person fejese    schedule 22.04.2014
comment
конечно, ваш путь к изображению неверен. ты пробовал unlink("/images/theone.png");?   -  person Thiago França    schedule 22.04.2014
comment
Что печатает echo substr(sprintf('%o', fileperms($myfile)), -4);?   -  person kelunik    schedule 22.04.2014
comment
Пути URL и расположение файлов на сервере — это очень разные вещи. В то время как начальный / в /images/theone.png означает относительно текущего домена в URL-адресе, в пути к файлу он означает относительно самого корня файловой системы сервера, что почти наверняка не то, что вы намеревались (и каталог, который вы даже не можете иметь доступ к). Вы должны указать фактическое расположение на диске файла для удаления, а не относительный путь.   -  person IMSoP    schedule 22.04.2014


Ответы (2)


Что о:

$root = realpath($_SERVER['DOCUMENT_ROOT']);
$myfile = '$root/images/theone.png';
unlink($myfile);

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

person Hiigaran    schedule 22.04.2014
comment
Я считаю, что была предпринята попытка $myfile = '/images/theone.jpg';, которая искала бы корень сервера. Ваше решение исправляет это, указывая правильный полный путь к удаляемому файлу. - person IMSoP; 22.04.2014
comment
Хм... Если я правильно помню, PHP не работает так же, как HTML, когда дело доходит до размещения / прямо в начале пути к файлу. Я не помню, так как я обычно всегда использую корень в сочетании с путем аналогично моему ответу. - person Hiigaran; 22.04.2014
comment
Я безуспешно пробовал функцию realpath, добавление $ root тоже ничего не дает.... - person Rik89; 22.04.2014
comment
Да, в этом вся проблема - он представляет собой корень сервера, то есть всей операционной системы, а не вашего конкретного сайта. Подумайте C:\ , если вы больше работаете с Windows/DOS. - person IMSoP; 23.04.2014
comment
@Rik89: Вы уверены, что у вас установлены правильные разрешения в каталоге изображений? Это единственное, о чем я могу думать. - person Hiigaran; 23.04.2014
comment
Правильный IMSoP!!!! Корень был root на сервере, а не путь, на котором находится мой веб-сайт, распечатайте путь $ root, чтобы экран показал, что /delete отсутствует, после добавления скрипт работает - person Rik89; 23.04.2014

__DIR__ - эта волшебная константа содержит текущий каталог, если файл находится в том же каталоге, что и ваш PHP-скрипт, вы можете использовать:

unlink(__DIR__ . "/$myfile");

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

unlink(__DIR__ . "/../$myfile");

Если каталог имеет правильные права доступа, он должен работать.

person Community    schedule 22.04.2014
comment
Я не думаю, что вы понимаете, что мне нужно, я могу удалить файл, когда он находится в том же каталоге (не то, чтобы я хотел сделать это таким образом), я действительно хочу удалить файл в /images/thefile.png - person Rik89; 23.04.2014
comment
@Rik89 Нет, нет (или я был бы очень удивлен, если бы ты это сделал). Это было бы похоже на удаление C:\images\thefile.png — это не тот путь к файлу, который вы когда-либо использовали. Итак, вы хотите построить путь относительно либо а) работающего PHP-скрипта (этот ответ), либо б) корня документа вашего веб-сайта (ответ Хигарана). - person IMSoP; 23.04.2014