2017-02-14 3 views
0

Вот моя проблема, я делаю запрос к MySQL (ПДО) для дать мне последние 5 URL-адресов из таблицы nammed аватар, который содержит идентификатор и URL:PHP - прочитать изображение с URL

$response = $dbh->query("SELECT url FROM avatar ORDER BY id_URL DESC LIMIT 0,5 "); 

И я сделал:

while ($donnees = $response->fetch()) 
{ 

$urlImage = $donnees['url']; //'url' contains the URL 
$result = file_get_contents($urlImage);   
header('Content-Type: image/png'); 
echo $result; 
?> 

Но заголовок просто возвращает небольшой пустой белый квадрат. Однако «$ result = file_get_contents ($ urlImage)»; принимает должным образом URL, потому что, когда я делаю:

$urlImage = $donnees['url']; //'url' contains the URL 
$result = file_get_contents($urlImage);   
echo $result; 
?> 

Это просто показывает «encodage изображения» (тонна специальных символов), но не отображает изображение.

Я также пытаюсь использовать «imagick», но он говорит мне, что класс не существует, и я не думаю, что imagecreatefrompng можно использовать с URL.

Спасибо!

+0

@Hexadect Где десятичную? – BenM

+0

@BenM Вы можете установить LIMIT 0,5? – DamiToma

+0

@Hexadect Да. Первое целое является просто смещением. Итак, 'LIMIT 10,5' выберет 5 записей со смещением 10.' LIMIT 5 OFFSET 0' == 'LIMIT 0,5' ==' LIMIT 5'. – BenM

ответ

1

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

Ваша проблема заключается в том, что браузер не понимает, что это должен быть образ.

Вы всегда можете сделать:

<img src="<?=$urlImage?>"> 
+0

1. '' является самозакрывающимся тегом. 2. Это цель 'header ('Content-Type: image/png');'. – BenM

+0

Но это работает, спасибо – Lafdoma

+0

@BenM. Я прихожу и помогаю кому-то, где ты не можешь, и ты даешь мне нижний план? –

3

Вы можете попробовать это и посмотреть, если он работает?

$image = file_get_contents($donnees['url']); 
$finfo = new finfo(FILEINFO_MIME_TYPE); 
header('content-type: ' . $finfo->buffer($image)); 
echo $image; 

Предположим, что нужно обрабатывать одно изображение. Один скрипт php может возвращать одно изображение. Если вы хотите, чтобы объединить изображения и сделать большое длинное изображение, то, вероятно, вы должны смотреть на http://image.intervention.io/

EDIT

То, что я понял после того, как пробуя приведенный выше код является то, что если вы поставите file_get_contents, прежде чем заголовок, то отображаются сырые символы. Однако вы выразились после заголовка, то все, кажется, работает

$image="http://www.hillspet.com/HillsPetUS/v1/portal/en/us/cat-care/images/HP_PCC_md_0130_cat53.jpg"; 
$filename = basename($image); 
$file_extension = strtolower(substr(strrchr($filename,"."),1)); 
switch($file_extension) { 
    case "gif": $ctype="image/gif"; break; 
    case "png": $ctype="image/png"; break; 
    case "jpeg": 
    case "jpg": $ctype="image/jpeg"; break; 
    default: 
} 

header('Content-type: ' . $ctype); 
$image = file_get_contents($image); 
echo $image; 

Работа fiddle

+0

Нет, я хочу вернуть одно изображение, это цикл, поэтому переменная всегда будет отображать одно изображение? Но это то же самое, что и мой код, это метаданные возврата изображения. – Lafdoma

+0

Вы написали заголовок и эхо в цикле. Это означает, что он будет эхом 5 раз. Таким образом, хотя клиентская сторона думает, что это образ, но он не может отобразить его, поскольку он представляет собой комбинацию для 5 URL-адресов изображений. Попробуйте сделать лимит 0,1 –

+0

А, да, я понимаю, что вы говорите, но я делаю Limit 0,1 и удаляю цикл, это дает тот же результат. – Lafdoma

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