Я не могу понять, почему 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
Я почти уверен, что что-то упустил, но мне кажется, что все в порядке, и я использую тот же метод где-то еще на моем сайте без каких-либо проблем.
Спасибо за помощь.
Сложно отлаживать ваше приложение без доступа, но вы можете попробовать, что 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
Если вы можете получить доступ к этому файлу (это будут двоичные данные), разрешения в порядке, в другом случае проверьте, есть ли у вас права доступа к файлу и являетесь ли вы хорошим владельцем и группой файлов.
Попробуйте просто использовать корень сайта и не используйте $ _SERVER [‘DOCUMENT_ROOT’].
Другой способ заключается в определении пути.
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);
}
}