Файл не существует, хотя путь кажется правильным

Я не могу понять, почему file_exists () не находит мой файл, хотя путь кажется правильным.

Вот мой сценарий:

if($_POST['delete-avatar'] == 'on') {
$q = execute_query("SELECT avatar FROM gj_customers WHERE id_customer = '$_GET[id]'");
$customer = $q->fetch_assoc();
$img_path = $_SERVER['DOCUMENT_ROOT'] . WEBSITE_ROOT . $customer['avatar'];
var_dump($img_path);

if(!empty($customer['avatar'])  && file_exists($img_path)){
unlink($img_path);
}
}

Я нахожусь на MAMP, мой сайт находится в htdocs / gamejutsu / www /, WEBSITE_ROOT содержит ‘/ gamejutsu / www /’, а аватары находятся в img / avatars /.

var_dump в $ img_path возвращает меня: /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg.

Если я захожу на localhost: 8888 / gamejutsu / www / img / avatars / Sonik_avatar.jpg изображение отображается.

Я никогда не вхожу в блок if. Если я удалю тест file_exists, у меня появится предупреждение: unlink (/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg): такого файла или каталога нет в / Applications / MAMP / htdocs / gamejutsu / www / admin / members.php в строке 67

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

Спасибо за помощь.

0

Решение

Сложно отлаживать ваше приложение без доступа, но вы можете попробовать, что return realpath ();

var_dump(realpath($img_path))

Если возвращается, нулевой файл не существует или ваше приложение не имеет к нему доступа.

Попробуйте открыть консоль и эту команду:

cd /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/

Если у вас есть ошибка, у вас неверный путь, и вы должны вручную проверить ее (проще всего будет с консоли), если вы можете перейти в этот каталог. Пожалуйста, добавьте сюда свой ls этого каталога для проверки прав доступа:

ls -la /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/

И если все выглядит хорошо, попробуйте сменить пользователя консоли на пользователя веб-сервера (обычно www-data) и попробуйте получить доступ к файлу

sudo su
su www-data
cat /Applications/MAMP/htdocs/gamejutsu/www/img/avatars/Sonik_avatar.jpg

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

1

Другие решения

Попробуйте просто использовать корень сайта и не используйте $ _SERVER [‘DOCUMENT_ROOT’].

0

Другой способ заключается в определении пути.

if($_POST['delete-avatar'] == 'on') {
$q = execute_query("SELECT avatar FROM gj_customers WHERE id_customer = '$_GET[id]'");
$customer = $q->fetch_assoc();
$img_path =' filename' . WEBSITE_ROOT . $customer['avatar'];
var_dump($img_path);

if(!empty($customer['avatar']) && file_exists($img_path)) {
unlink($img_path);
}

}
0
По вопросам рекламы [email protected]