如何在HTML中显示PHP函数输出的图片?附示例代码
关于PHP图片输出函数在HTML中调用方式的解答
兄弟,先给你泼个冷水——你现在写的两种调用方式全不对,而且你的function_image函数本身还藏着几个bug,得先把这些坑填上,才能正常在页面里显示图片。
先聊聊函数本身的问题
- 你用
file_get_contents($url)拿到的是图片的二进制内容,不是本地文件路径,但你后面用了filesize($file)和readfile($file)——这俩函数都是要传文件路径的,直接传二进制内容肯定会报错。 - 你硬把Content-Type固定成了
image/jpeg,要是远程图片是PNG或者GIF,浏览器就会识别错误,显示不出图片。 - 正确的做法是用
strlen($file)来获取二进制内容的长度,直接echo $file输出图片内容,再自动判断图片类型。
再说说为什么你的两种调用方式都不行
第一种:把函数调用塞到img的src里
<img src="<?php echo function_image('http://otherwebsite.com/image.jpeg'); ?>" />
img的src属性需要的是图片的URL地址,但你的函数直接输出了HTTP头和图片二进制内容,这会把一堆乱码一样的二进制数据塞进src里,浏览器根本看不懂,肯定显示不出来。
第二种:直接在HTML里echo调用函数
<?php echo function_image('http://otherwebsite.com/image.jpeg'); ?>
你的函数已经在输出image/jpeg的HTTP头了,但HTML页面本身的Content-Type是text/html,这俩头冲突了,浏览器要么显示一堆乱码,要么直接把图片当成下载文件,没法正常嵌入到页面里。
正确的打开方式
你得把这个图片处理逻辑单独做成一个独立的PHP脚本,然后在HTML的img标签里引用这个脚本的地址,把远程图片URL作为参数传过去。
第一步:修复并完善你的函数(存为get_image.php)
<?php function function_image($url) { // 获取远程图片内容,处理获取失败的情况 $file = file_get_contents($url); if (!$file) { header("HTTP/1.1 404 Not Found"); exit; } // 自动识别图片的MIME类型 $finfo = new finfo(FILEINFO_MIME_TYPE); $type = $finfo->buffer($file); // 输出正确的HTTP头 header('Content-Type: ' . $type); header('Content-Length: ' . strlen($file)); // 输出图片二进制内容 echo $file; } // 从URL参数里拿到要加载的图片地址 if (isset($_GET['url'])) { function_image($_GET['url']); } else { header("HTTP/1.1 400 Bad Request"); exit; } ?>
第二步:在HTML页面里引用这个脚本
<img src="get_image.php?url=http://otherwebsite.com/image.jpeg" alt="远程加载的图片" />
这样一来,当浏览器加载img标签时,会请求get_image.php这个脚本,脚本会帮你获取远程图片、输出正确的HTTP头和图片内容,浏览器就能正常显示图片了。
内容的提问来源于stack exchange,提问作者MadzQuestioning
相关产品推荐
相关产品推荐

