【发布时间】:2020-07-04 14:35:08
【问题描述】:
有一堆与这个标题相同的问题。 比如
- How to output images using php?
- Output as an image using PHP
- How to output image and download using php
答案总是有一些变化
将
header('Content-type: image/jpeg');添加到您的代码中
毫无疑问,这是答案的重要部分,但遗漏了一些我真的无法解决的重要步骤。
假设你有一个网页
<?php
require_once("load_a_scripts.php");
print("lots of html");
// fetch image from below root directory and output in HTML
?>
<img id="this_one" src="" height="200" width="200" />
你想输出this_one,上面的图像吗?
PHP 可用于使用 readfile() 来获取所需的文件,但这在这里不会非常有用(充其量你会得到随机的 unicode 输出而不是正确的图像)。
防止乱码输出的解决方法是使用
header('Content-type: image/jpeg');
这显然在这里似乎不合适。不仅有输出,这将使设置标题变得不可能,而且即使这个操作过程成功,最好的希望是图像的下载提示。同样,这不是所需的功能。
因此,一些解决方案建议使用一些外部代码,例如“image.php”,它将有自己的标头并获取图像,等等。但是,这又存在一些问题。
image.php 怎么知道你想要什么图片?
<?php header('Content-Type:'.$photo);
if(isset($photo)&&isset($type)){
if(strlen($photo)>15||strlen($type)>6){
die();
}
$photo = strtolower($photo);
$photo = preg_replace('/[^a-z0-9 -]+/', '', $photo);
$photo = str_replace(' ', '-', $photo);
$photo = trim($photo, '-');
$type = strtolower($type);
$type = preg_replace('/[^a-z0-9 -]+/', '', $type);
$type = str_replace(' ', '-', $type);
$type = trim($type, '-');
readfile('../img/'.$user_id.$photo);
}
与图像名称 ($photo) 和 mime ($type) 相关的参数假设可以使用 GET 发送,但同样,这些参数是由什么发送的,以及如何发送?
一些答案似乎表明您可以直接链接到外部 image.php,就好像它是图像一样
<img src="image.php" />
但这又提出了一个问题,即 image.php 如何知道 $photo 和 $type 的值。
【问题讨论】:
-
为了搞清楚,您是在尝试基于 GET 变量动态加载
<img ../>标记,还是希望基于 url 加载整个 php 脚本,例如http://placehold.it/200x200? -
请更准确简洁地描述您的问题。
-
@MatthewSpence 我想使用 php 动态加载图像。写
-
@KunalRaut 你有什么问题?这样的问题太多了,所以我担心会因为重复而被删除。
标签: php image http-headers