HTML — file_exists в PHP не работает должным образом

Для профиля пользователя на моем сайте им разрешено загружать 1 изображение профиля. Это может быть PNG, JPG, JPEG или GIF. Теперь моя проблема с отображением изображений. В основном, я хотел бы посмотреть, какой тип расширения у него есть, а затем отобразить файл соответствующим образом. Я пытаюсь достичь этого с Файл существует функция в PHP, но, похоже, не работает! 🙁

Если я наберу URL (для примера используется .png)

HTTP: // локальный / Postin«/profiles/pictures/username.png

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

C: /wamp/www/postin’/profiles/pictures/username.png

в адресной строке отобразится изображение этого пользователя. Теперь моя проблема, если я делаю PHP file_check на любом из них всегда говорится, что файл НЕ существует. Вот код, который я использую:

<?php

$profileimagepath = "C:/wamp/www/postin'/profiles/pictures/";

$profileimageurl = "http://localhost/postin'/profiles/pictures/";

if (file_exists($profileimagepath.$username."."."png")) {   ?>
<img src=<?php $profileimageurl.$username."."."png"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."jpg")) {   ?>
<img src=<?php $profileimageurl.$username."."."jpg"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."jpeg")) {   ?>
<img src=<?php $profileimageurl.$username."."."jpeg"; ?> id="accountpictureholderspecs">
<?php
}
elseif (file_exists($profileimagepath.$username."."."gif")) {   ?>
<img src=<?php $profileimageurl.$username."."."gif"; ?> id="accountpictureholderspecs">
<?php
}
else {   ?>
<img src="http://localhost/postin'/images/profileimage.png" id="accountpictureholderspecs">
<?php
}
?>

И в приведенном выше примере имя пользователя это просто имя пользователя пользователя. Так что мне интересно, почему этот код не работает? Благодарю вас!! 🙂

РЕДАКТИРОВАТЬ
Вот мой общий путь к файлу:

C:\wamp\www\postin'\profiles\pictures\image.png

Тем не менее, когда я набираю:

\pictures\image.png

Это не будет работать, изображение не отображается! 🙁
Кстати, моя структура каталогов:

Postin'
Profiles
Pictures
image.png

0

Решение

Из комментария php.net

При использовании file_exists, кажется, вы не можете сделать:

<?php
foreach ($possibles as $poss)
{
if ( file_exists(SITE_RANGE_IMAGE_PATH .$this->range_id .'/ '.$poss .'.jpg') )
{
// exists
}
else
{
// not found
}
}
?>

так что вы должны сделать:

<?php
foreach ($possibles as $poss)
{
$img = SITE_RANGE_IMAGE_PATH .$this->range_id .'/ '.$poss .'.jpg'
if ( file_exists($img) )
{
// exists
}
else
{
// not found
}
}
?>

Тогда все будет работать нормально.

Это, по крайней мере, так в этой системе Windows, на которой запущены php 5.2.5 и apache 2.2.3

Не уверен, что дело до конкатенации или факта константы, я собираюсь убежать и проверить это …

1

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

Ну, если вы не знаете точное исключение — не используйте if/else заявления. Вы не можете охватить все возможные комбинации строчных и прописных букв.

Лично я бы порекомендовал конвертировать изображение в ВАШ любимый формат, когда пользователь загружает его, чтобы вы точно знали, что ищете!

Если это невозможно по каким-либо причинам, вы можете использовать glob() найти любой файл, загруженный пользователем.

$profileimagepath = "C:/wamp/www/postin'/profiles/pictures/";
$profileimageurl = "http://localhost/postin'/profiles/pictures/";

$files = glob($profileimagepath . $username . ".*");

foreach($files AS $file){
echo "Found an image: <br />";
echo $file. "<br />";
echo "External-Adress is: " . str_replace($profileimagepath, $profileimageurl, $file);
}

Тем не менее, для этого потребуется иметь дело с несколькими файлами и … нет … Конвертировать, сохранить, использовать!

1

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