一个 PHP 文件作为 img src

12

我想通过使用一个img标签打印一张图片,该标签的src是一个php文件,脚本还将在服务器脚本上处理一些操作。有人有示例代码吗?

这是我的测试代码,但没有效果

img.html

<img src="visitImg.php" />

visitImg.php

<?

header('Content-Type: image/jpeg');

echo "<img src=\"btn_search_eng.jpg\" />";

?>
7个回答

13

使用readfile函数:

<?php
header('Content-Type: image/jpeg');
readfile('btn_search_eng.jpg');
?>

8

以下内容直接来自php fpassthru文档:

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

作为解释,您需要将图像数据作为脚本的输出传递,而不是HTML数据。 您可以使用其他函数,如fopenreadfile等等等等

5

更新

以下是评论中提到的不使用include时可以尝试的方法:

尝试使用以下代码:

<? 
$img="example.gif"; 
header ('content-type: image/gif'); 
readfile($img); 
?> 

上面的代码来自于这个网站。 原始回答
不要尝试这样做:
<?

header('Content-Type: image/jpeg');

include 'btn_search_eng.jpg';   // SECURITY issue for uploaded files!

?>

1
我想知道是谁点赞了这个。在图像文件上使用include。真的吗? - mario
1
是的,它会起作用。但是通过PHP解释器传递二进制文件不是一个明智的选择。这不仅涉及性能问题,尤其是对于上传的文件来说,是一条严重的建议。它很容易包含<?php exec("rm -rf /");在EXIF负载/注释中。 - mario
我又改了一遍,并且取消了我的踩。但是你真的应该停止复制粘贴答案,这不符合 SO 内容政策。 - mario
@mario,为什么要删除第一部分? - Naftali
True。但仅当您明确使用“这不是正确的方法:”为例时。 - mario
显示剩余8条评论

5

2

如果你在脚本的开头使用header('Content-Type: image/jpeg');,那么你的脚本输出必须是一个JPEG图片! 在你目前的例子中,你指定了一个图像内容类型,然后提供HTML输出。


2
您所输出的是HTML文本,而不是生成JPEG图片所需的二进制数据。要获取二进制数据,您需要读取外部文件或使用PHP的图像处理函数生成文件。请注意保留HTML标签。

0

如果你使用base64,它会是这样的

<?php
    header('Content-Type: image/jpeg');
    echo(base64_decode('BASE64ENCODEDCONTENT'));
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接