2010-07-14 4 views
0
<? 
$user_image = '../images/users/' . $userid . 'a.jpg'; 
if (file_exists($user_image)) 
{ 
    echo '<img src="'.$user_image.'" alt="" />'; 
} 
else 
{ 
    echo '<img src="../images/users/small.jpg" alt="" />'; 
} 
?> 

Привет всем, этот код должен проверять файл, и если он не работает, отобразите другое. По какой-то причине он ВСЕГДА отображает местозаполнитель и никогда не находит начальный файл, даже если он есть. Есть ли что-то явно не здесь? Спасибо за чтение!Проверка существования файла всегда сбой

+0

Вы пробовали использовать путь из корневого каталога пользователя вместо относительного пути? – DeaconDesperado

+0

Текущий рабочий каталог, возможно, не тот, который вы ожидаете, что дает реальный путь ('../ images/users /') или вывод getcwd()? – Wrikken

+0

Вы проверили, какое значение имеет значение $ user_images? например echo ($ user_image) – macleojw

ответ

1

Попробуйте вместо этого использовать realpath и dirname.

<? 
$user_image = '../images/users/' . $userid . 'a.jpg'; 
if (file_exists(realpath(dirname(__FILE__) . $user_image))) 
{ 
    echo '<img src="'.$user_image.'" alt="" />'; 
} 
else 
{ 
    echo '<img src="../images/users/small.jpg" alt="" />'; 
} 
?> 
+0

Cheers bud, это работает. – sark9012

4

PHP работает в другом каталоге. попробуйте echo getcwd();

2

Если относительные точки пути, выходящие за HTDOCS подкаталогов, то изображение не будет отправлено на веб-сервере

4

file_exists не работает с относительными путями. Попробуйте что-то вроде этого:

$user_image = $_SERVER{'DOCUMENT_ROOT'}.'/../images/users/' . $userid . 'a.jpg'; 
if (file_exists($user_image)) 
// blah blah 

Но, как говорит Artefacto, то лучше использовать реальный путь:

$user_image = '/path/to/your/files/images/users/' . $userid . 'a.jpg'; 

легче поддерживать, так как вы можете использовать этот код на различных PHP скриптов, расположенных на разных каталоги, не изменяя ничего.

+0

http://www.php.net/manual/en/function.file-exists.php#93572 – DeaconDesperado

+0

спасибо ... Я добавляю этот пример прямо сейчас. – Cristian

+1

Почему бы и нет 'realpath'? – Artefacto

0

Я имею в виду, что я не всегда самый умный с php, но верно ли ваше местоположение concat? Потому что прямо сейчас, не решит ли он /images/users/userida.jpg? это действительно то, что вы хотите?

+0

Нет, он разрешит: '../ images/users/123a.jpg ', если $ userid' 123 ' –

+0

вправо, это именно то, что я говорил. просто забыл .. – cwill747

+0

Это то, что он хочет, хотя. –

0

Я думаю, вы должны проверить, что возвращает realpath('../images/users/' . $userid . 'a.jpg'). Я чувствую, что это связано с относительным путем.

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