Intereting Posts
mysqli_query () ожидает как минимум 2 параметра & mysqli_query (): пустые сообщения об ошибках запроса Выбрасывание исключений в автозагрузчике SPL? Как CodeIgniter знает, что cookie содержит действительные данные сеанса? Извлечение URL из текста в PHP Сгенерировать секретный код для сброса пароля Возможно ли создание PHP-расширений в Haskell? Разрешить проверку только в том случае, если продукт обязательной категории находится в корзине сортировать массив по значению, которое вычисляется из массива array_multisort с естественной сортировкой PHP: скрипт для генерации кроссвордов? Вызов неопределенной функции sqlsrv_connect () с WAMP Сделать необходимое число совпадений соответствует char_length столбца Можно ли использовать массив без его инициализации? Как преобразовать эти координаты в читаемые координаты карты Google? Как развернуть результаты запроса для бесконечного прокрутки?

Вернуть страницу PHP как изображение

Я пытаюсь читать файл изображения (точнее, .jpeg) и «эхо» обратно на вывод страницы, но есть отображение изображения …

my index.php имеет ссылку на изображение следующим образом:

<img src='test.php?image=1234.jpeg' /> 

и мой php-скрипт делает в основном это:

1) читать 1234.jpeg 2) содержимое эхо-файла … 3) У меня есть ощущение, что мне нужно вернуть результат обратно с типом mime, но вот где я теряюсь

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

Если я не понимаю, или вам нужна дополнительная информация, ответьте.

В руководстве PHP есть пример :

 <?php // open the file in a binary mode $name = './img/ok.png'; $fp = fopen($name, 'rb'); // send the right headers header("Content-Type: image/png"); header("Content-Length: " . filesize($name)); // dump the picture and stop the script fpassthru($fp); exit; ?> 

Важным моментом является то, что вы должны отправить заголовок Content-Type. Кроме того, вы должны быть осторожны, чтобы не добавлять лишние пробелы (например, новые строки) в ваш файл до или после тегов <?php ... ?> .

Как указано в комментариях, вы можете избежать опасности лишнего пробела в конце вашего скрипта, опуская тег ?> :

 <?php $name = './img/ok.png'; $fp = fopen($name, 'rb'); header("Content-Type: image/png"); header("Content-Length: " . filesize($name)); fpassthru($fp); 

Вам все равно нужно тщательно избегать пробелов в верхней части скрипта. Одной особенно сложной формой белого пространства является спецификация UTF-8 . Чтобы этого избежать, обязательно сохраните свой сценарий как «ANSI» («Блокнот») или «ASCII» или «UTF-8 без подписи» (Emacs) или аналогичный.

readfile() обычно используется для выполнения этой задачи. Я не могу сказать, если это лучшее решение, чем использование fpassthru() , но оно работает хорошо для меня, и, согласно документам , оно не будет представлять проблемы памяти.

Вот мой пример этого в действии:

 if (file_exists("myDirectory/myImage.gif")) {//this can also be a png or jpg //Set the content-type header as appropriate $imageInfo = getimagesize($fileOut); switch ($imageInfo[2]) { case IMAGETYPE_JPEG: header("Content-Type: image/jpeg"); break; case IMAGETYPE_GIF: header("Content-Type: image/gif"); break; case IMAGETYPE_PNG: header("Content-Type: image/png"); break; default: break; } // Set the content-length header header('Content-Length: ' . filesize($fileOut)); // Write the image bytes to the client readfile($fileOut); } 

Это должно сработать. Это может быть медленнее.

 $img = imagecreatefromjpeg($filename); header("Content-Type: image/jpg"); imagejpeg($img); imagedestroy($img); 

Еще один простой вариант (не лучше, просто отличный), если вы не читаете из базы данных, – это просто использовать функцию для вывода всего кода для вас … Примечание. Если вы также хотели, чтобы php читал размеры изображения и выдавал что для клиента для более быстрого рендеринга вы можете легко сделать это тоже с помощью этого метода.

 <?php Function insertImage( $fileName ) { echo '<img src="path/to/your/images/',$fileName,'">'; } ?> <html> <body> This is my awesome website.<br> <?php insertImage( '1234.jpg' ); ?><br> Like my nice picture above? </body> </html>