将 PHP 页面作为图像返回

我正在尝试读取一个图像文件(。确切地说是 jpeg) ,并且‘ echo’它返回到页面输出,但是 have 显示一个图像..。

我的 index.php 有这样一个图片链接:

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

我的 php 脚本基本上是这样的:

1)阅读1234. jpeg 2)回显文件内容..。 3)我有一种感觉,我需要返回一个 mime 类型的输出,但这是我迷失的地方

一旦我解决了这个问题,我将删除所有文件名输入,并将其替换为一个图像 ID。

如果我不清楚,或者你需要更多的信息,请回复。

113622 次浏览

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)或类似的名称。

另一个简单的选择(没有任何更好的,只是不同) ,如果你不是从数据库读取是只是使用一个函数输出所有的代码给你..。 注意: 如果您还希望 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>

应该可以,可能会慢一点。

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

我觉得我们可以通过从 $image _ info 获取 mime 类型来使代码变得更简单一些:

$file_out = "myDirectory/myImage.gif"; // The image to return


if (file_exists($file_out)) {


$image_info = getimagesize($file_out);


//Set the content-type header as appropriate
header('Content-Type: ' . $image_info['mime']);


//Set the content-length header
header('Content-Length: ' . filesize($file_out));


//Write the image bytes to the client
readfile($file_out);
}
else { // Image file not found


header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");


}

有了这个解决方案,任何类型的图像都可以处理,但它只是另一种选择。感谢 地球工程的贡献。

我的工作没有内容长度。也许原因工作的远程图像文件

// open the file in a binary mode
$name = 'https://www.example.com/image_file.jpg';
$fp = fopen($name, 'rb');


// send the right headers
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: January 01, 2013'); // Date in the past
header('Pragma: no-cache');
header("Content-Type: image/jpg");
/* header("Content-Length: " . filesize($name)); */


// dump the picture and stop the script
fpassthru($fp);
exit;

非常,非常简单。

<?php


//could be image/jpeg or image/gif or whatever
header('Content-Type: image/png')
readfile('image.png')
?>