Я пытаюсь читать файл изображения (точнее, .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>