Ошибка разъединения PHP - ошибка пути

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

Я пробовал довольно много вариантов, чтобы отсоединить файл от каталога.

Резюме: delete.php (файл, который выполняет действие) находится в основной папке. Файл (изображение), который необходимо удалить, находится в подкаталоге «upload».

$file = $name . '.' . $ext; 

$tmpfile = 'upload/'. $file; 
unlink($tmpfile);

Чем этот тоже.

if (!unlink("upload/$file")) {
    echo "Error deleting ... $file  ... from directory";
}
else {
    echo "Deleted $file";
}

И многое другое. Вот журнал ошибок

unlink(upload/Glauber_3232_MAGNOLIA_ST__016.jpg) [function.unlink]: Нет такого файла или каталога в /home2/braaasil/public_html/openhouse/delete.php в строке 30

Поэтому я не могу выйти из основного каталога (где находится delete.php) и перейти в подкаталог «загрузить», где находятся мои изображения. Любое предложение будет принята с благодарностью.

ИЗМЕНИТЬ

public_html

   openhouse (sub domain)

      delete.php (this is a file)

      upload (this is sub folder)

Если не понятно могу сделать фото. delete.php и загрузка подпапки находятся на одном уровне, оба дети openhouse. Надеюсь, это понятно.


person user2060451    schedule 25.09.2013    source источник
comment
Вы уверены, что файл /home2/braaasil/public_html/openhouse/upload/Glauber_3232_MAGNOLIA_ST__016.jpg существует? Обратите внимание, что имена файлов чувствительны к регистру.   -  person Alex    schedule 26.09.2013
comment
Вы пробовали "../upload/$file" ?   -  person Bart Friederichs    schedule 26.09.2013
comment
Не говорю, что это ваша проблема, но вы всегда должны использовать относительные пути на основе текущего каталога: __DIR__ . '/upload/' . $file. Потому что иногда текущий рабочий каталог не такой, как вы думаете.   -  person PeeHaa    schedule 26.09.2013
comment
Я пробовал ../upload/$file Проблема в том, что он пытается найти файл внутри сообщения об ошибке delete.php как ../delete.php/my_image_to_be_delete.jpeg   -  person user2060451    schedule 26.09.2013


Ответы (2)


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

Я думаю, вы используете подпапку, но upload указывает на корневую папку, поэтому не может найти папку.

Попробуйте: unlink (__DIR__ . '/upload/' . $file);

Если это работает, вы также можете использовать его как: "./upload/$file"

person Aristona    schedule 25.09.2013
comment
@ПиХаа; Вы, наверное, редактировали мой комментарий, пока я редактировал его сам. - person Aristona; 26.09.2013
comment
@Imaqtpie, теперь это снова неправильно - __DIR__ не имеет завершающей косой черты. - person George Brighton; 26.09.2013
comment
@GeorgeBrighton Извините, это было случайно перезаписано. Я добавил это. - person Aristona; 26.09.2013
comment
Я новичок в PHP, так что простите за невежество. Я использовал ваш скрипт, как он есть. Без изменений. Получил это снова. Нет такого файла или каталога в /home2/braaasil/public_html/openhouse/delete.php по какой-то причине я не могу получить это: home2/braaasil/public_html/openhouse/upload/ (тогда изображение будет удалено) - person user2060451; 26.09.2013
comment
Да, это подпапка. delete.php находится в основной папке. Изображения находятся в папке sulfolder, называемой upload'. - person user2060451; 26.09.2013
comment
@user2060451 user2060451 Как выглядит ваша структура? Где находится файл delete.php и где находится папка загрузки? Мой ответ должен быть действительным, если папка загрузки и файл delete.php находятся в одном каталоге. Редактировать: вы не пропускаете косую черту перед загрузкой, верно? Я обновил свой ответ, поэтому попробуйте еще раз. - person Aristona; 26.09.2013
comment
Что возвращает realpath('upload/' . $file); перед строкой if (!unlink ("upload/$file"))? - person George Brighton; 26.09.2013
comment
@Imaqtpie Я отредактировал вопрос, добавив дерево папок. Если не понятно, будет картинка. Спасибо за терпеливость. - person user2060451; 26.09.2013
comment
a@GeorgeBrighton Не уверен, что понял. Это маршруты, которые я пробовал не одновременно. ошибка для ВСЕХ попыток: нет такого файла или каталога в /home2/braaasil/public_html/openhouse/delete.php в строке 27 - person user2060451; 26.09.2013
comment
Если delete.php находится в папке openhouse, а папка загрузки находится в папке public_html, попробуйте следующее: __DIR__ . '/../upload/' . $file - person Aristona; 26.09.2013
comment
@Imaqtpie Я добавил косую черту. То же сообщение об ошибке: [25 сентября 2013 г. Предупреждение PHP: unlink(__DIR__/upload/) [‹a href='function.unlink'›function.unlink‹/a›]: Нет такого файла или каталога в /home2/braaasil /public_html/openhouse/delete.php в строке 27 - person user2060451; 26.09.2013
comment
@user2060451 user2060451 Попробуйте решение, которое я разместил над этим комментарием. Он должен работать с вашей структурой каталогов. - person Aristona; 26.09.2013

Мне жаль ! По какой-то причине БД начала принимать как image.jpg, так и image.JPG, хотя у меня была команда strtolower для всех записей.

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

Для всех остальных: убедитесь, что БД, файл и поиск настроены на нижний регистр, поскольку БД может быть чувствительна к верхнему и нижнему регистру.

person user2060451    schedule 25.09.2013