Я пытаюсь сделать фотографии профиля представленными против списка отзывов на сайте, над которым я работаю. Если у них нет профиля, у меня есть стандартный образ для показа, но, к сожалению, изображение всегда идет на стандартный образ, а не на профиль, даже если он существует. Вот код:
$reviewerPic = 'http://www.[URL].co.uk/images/members/' . $reviewPosterId . '/profilePic.jpg'; $default_pic = 'http://www.[URL].co.uk/images/background.jpg'; if(file_exists($reviewerPic)){ $reviewer_pic = '<img src="' . $reviewerPic . '" width="100px" style="float: left; margin: 20px;" />'; }else { $reviewer_pic = '<img src="' . $default_pic . '" width="100px" style="float: left; margin: 20px;" />'; }
Довольно общий код, но он не работает! Он просто продолжает показывать фоновое изображение …
Любые идеи о том, почему file_exists не будут работать?
Функция, которую вы используете, file_exists , использует физические пути, параметр, который необходимо указать , должен быть адресом на том сервере, на котором файл может быть найден, а не URL-адресом
У тебя должно быть что-то вроде
/home/var/www/images/
вместо
http://www.[URL].co.uk/images/
Поэтому вам нужно проверить, существует ли файл на сервере локально, и после этого вы можете использовать URL-адрес, чтобы сделать его доступным для публики (в img src)
Вы можете видеть на странице руководства, что эта функция работает только с некоторыми оболочками URL-адресов, поэтому лучше использовать пути, а не URL-адреса (я думаю, это зависит от того, разрешить настройку url fopen)
file_exists
не работает с HTTP,
use: $_SERVER["DOCUMENT_ROOT"]
для доступа к корню на вашем хосте
так
$reviewerPic = $_SERVER["DOCUMENT_ROOT"].'/images/members/' . $reviewPosterId . '/profilePic.jpg'; $default_pic = $_SERVER["DOCUMENT_ROOT"].'/images/background.jpg';
File_exists использует / home / www / username / public_html / format. Вы можете захотеть получить это от своего хоста.
Таким образом, это будет что-то вроде /home/www/jack/public_html/[URL].co.uk/profilepic/id/profilePic.jpg
.
Кстати, не нужно использовать .
в вашем echo '<img src=...
Вы можете использовать переменные внутри строк, вы должны использовать только .
когда вам нужно изменить его с помощью функции или чего-то вроде функции "string0".function($str....)."string1";
Согласно руководству PHP для file_exists не все протоколы поддерживают эту функцию:
эта функция также может использоваться с некоторыми обертками URL. Обратитесь к поддерживаемым протоколам и упаковщикам, чтобы определить, какие обертки поддерживают семейство функций stat ().
HTTP-обертка не поддерживает stat:
Поддерживает stat () Нет
функция file_exists
PHP работает только с физическими файлами, такими как /var/www/file.ext
или C:\WWW\File.ext
а не для файлов HTTP. Он даже не знает, как обращаться с HTTP-файлами.
В этом случае, если вы хотите узнать, есть ли файл или нет, поскольку он будет HTTP-ответом, вы можете попробовать использовать curl
, который, если он отвечает 404
, затем файл не найден.
Для получения дополнительной информации ознакомьтесь с ними: http://php.net/manual/en/function.file-exists.php и http://php.net/manual/en/book.curl.php
file_exists
не поддерживает удаленные URL-адреса.
Вы можете попробовать следующее:
if (fopen($reviewerPic, "r")) echo "File exists!";
Попробуйте простой.
$reviewerPic = 'http://www.[URL].co.uk/images/members/' . $reviewPosterId . '/profilePic.jpg'; $default_pic = 'http://www.[URL].co.uk/images/background.jpg'; if($fileopen = @fopen($reviewerPic)){ $reviewer_pic = '<img src="' . $reviewerPic . '" width="100px" style="float: left; margin: 20px;" />'; fclose($fileopen); }else { $reviewer_pic = '<img src="' . $default_pic . '" width="100px" style="float: left; margin: 20px;" />'; }