将 PHP 页面作为图像返回

我正在尝试读取图像文件(确切地说.jpeg),并将其“回显”回波“回波到页面输出,但具有显示图像...

我的索引.php有一个这样的图像链接:

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

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

1) 读取 1234.jpeg 2) 回显文件内容...3)我有一种感觉,我需要用哑剧类型返回输出,但这是我迷路的地方

一旦我弄清楚了这一点,我将一起删除文件名输入,并将其替换为图像ID。

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


答案 1

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;
?>

要点是您必须发送内容类型标头。此外,必须小心,不要在文件中的标签之前或之后包含任何额外的空格(如换行符)。<?php ... ?>

如注释中所示,您可以通过省略标记来避免脚本末尾出现额外空白的危险:?>

<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');

header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

fpassthru($fp);

您仍然需要小心避免在脚本顶部留出空格。一种特别棘手的空白形式是 UTF-8 BOM。为避免这种情况,请确保将脚本另存为“ANSI”(记事本)或“ASCII”或“不带签名的 UTF-8”(Emacs)或类似内容。


答案 2

我觉得我们可以通过从$image_info获取哑剧类型来使这段代码变得容易一些:

$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");

}

使用此解决方案,可以处理任何类型的图像,但这只是另一种选择。感谢Ban-Geoengineering的贡献。


推荐