Для профиля пользователя на моем сайте им разрешено загружать 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
Из комментария 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
Не уверен, что дело до конкатенации или факта константы, я собираюсь убежать и проверить это …
Ну, если вы не знаете точное исключение — не используйте 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);
}
Тем не менее, для этого потребуется иметь дело с несколькими файлами и … нет … Конвертировать, сохранить, использовать!