2015-05-15 4 views
0

Я не могу понять, почему 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/аватары/,

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 on line 67

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

Благодарим за помощь.

ответ

1

Сложно отлаживать приложение без доступа, но вы можете попробовать, что возвращает 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-данных) и попробуйте-доступ к файлу

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

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

+0

Благодарим вас за ввод. var_dump (realpath ($ img_path)) возвращает false. cd/Applications/MAMP/htdocs/gamejutsu/www/img/avatars/работает так, что путь хорош. Но разрешения не совпадают для всех файлов (хотя они были загружены одинаково). У некоторых есть -rw-r-r--, а у некоторых есть -rwxrwxrwx –

+0

И если вы меняете разрешение на использование вручную (777), это работает?Это странно, потому что если у вас есть разрешение на чтение, вы можете получить доступ к файлу через realpath и file_exists .. Вы пытались выполнить команду cd с пути из var_dump ($ img_path)? Плюс я обновил свой ответ –

+0

Я попытался загрузить новый аватар, и у него есть -rw-r-r--. Для этого файла у меня может быть real_path, так что вы, кажется, правы. Я думаю, что разрешения изменились, когда я изменил папку приложения. Тем не менее, я не знаю, как изменить разрешения (я ищу его). –

0

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

+0

Это не решит проблему: Предупреждение: unlink (/gamejutsu/www/img/avatars/Billy_avatar.jpg): Нет такого файла или каталога в /Applications/MAMP/htdocs/gamejutsu/www/admin/members.php on line 67 –

+0

Зачем нужно OP «попробовать это»? – Rizier123

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); 
    } 

} 
Смежные вопросы