使用PHP发送某个图像
我想有一个PNG图片,但当访问它时,它运行一个PHP脚本,PHP脚本应该决定发送什么图片(使用一些if语句和其他什么)。然后PHP脚本应该从web服务器上的某个地方读取图像文件并输出它 问题是,如果我得到一个.png文件,并将PHP代码放入其中,它将无法工作,但是,如果我使用.PHP扩展名,它可以工作,我甚至可以将图像嵌入其他网站,PHP可以决定发送什么图像,但如果我想直接查看该图像(将其URL复制到我的地址栏中),它将无法工作,它为我提供了简单内容的图像(随机jibberish) 有人知道该怎么做吗使用PHP发送某个图像,php,image,Php,Image,我想有一个PNG图片,但当访问它时,它运行一个PHP脚本,PHP脚本应该决定发送什么图片(使用一些if语句和其他什么)。然后PHP脚本应该从web服务器上的某个地方读取图像文件并输出它 问题是,如果我得到一个.png文件,并将PHP代码放入其中,它将无法工作,但是,如果我使用.PHP扩展名,它可以工作,我甚至可以将图像嵌入其他网站,PHP可以决定发送什么图像,但如果我想直接查看该图像(将其URL复制到我的地址栏中),它将无法工作,它为我提供了简单内容的图像(随机jibberish) 有人知道该怎
这也是我关于堆栈溢出的第一个问题-如果我做错了,请告诉我。您需要发送
内容类型
标题
对于png
:
header('Content-Type: image/png');
对于其他人,将png
更改为jpg
或gif
或bmp
或任何内容
请注意,在将任何内容写入输出之前,必须先使用
header()
函数。首先,确保您的image.png可以被php访问
然后创建一个php脚本image.php:
我知道的最简单的版本
<?php
header('Content-Type: image/png');
if(whatever)
{
$image=your_image_select_function();
}
// as suggested by sh1ftst0rm with correction of unmatched quotes.
header('Content-Disposition: inline; filename="'.$your_name_variable.'"');
readfile($image);
?>
听起来您知道如何发送图像,您的问题是希望URL看起来像PNG图像
你可以做几件事。首先,如果您的web服务器支持URL重写(如Apache的mod_rewrite
模块),则可以使用重写规则,以便用户像http://example.com/generated_image.png
但您的服务器将翻译/重写此URL以直接指向您的PHP脚本,比如说/var/www/image\u generator.php
另一种选择是将脚本命名为“generated_image.png”,但强制Web服务器将其视为PHP脚本。例如,在Apache中,您可以尝试以下操作:
<Location /generated_image.png>
ForceType application/x-httpd-php
</Location>
这样,不管URL是什么,如果用户通过他们的web浏览器保存图像,web浏览器应该提供“generated_image.png”作为默认文件名。如果我得到一个.png文件,并在其中放入PHP代码,它将不起作用——我不明白。你的意思是什么?使用适当的内容类型标题。你是在寻求用PHP显示图像的解决方案,还是在描述一个已有系统的问题?如果你有代码,那么请显示它。请告诉我,如果我做错了什么,张贴一些你已经尝试过的代码,并尝试一些谷歌搜索。你可能比问一个新问题更快找到答案。或者,如果输出是缓冲的,你可以在代码中的任何地方使用header()函数(ob…
函数)。是的,这就是为什么我在写以输出
:)之前写的原因,正如Cobra提到的,$image
必须可以被PHP脚本访问。你可能需要把它改成“/path/to/images/”。$image
呃,我只是更仔细地重读了这个问题,听起来我回答错了。我现在就把它留下,因为它可能仍然有用。如果有人要我把它拿走,我会的。这没用。通过重写将.png作为php脚本进行威胁将使内容类型保持不变,因此浏览器仍然不会将其作为图像进行威胁。至少大多数浏览器都是这样,我知道。如果你看我在你上面的评论,我误解了这个问题,但把它留在这里,以防它有用。
<img src="pngmaker.php">
<img src="pngmaker.php/?id=123&user=me">
<Location /generated_image.png>
ForceType application/x-httpd-php
</Location>
<?php
header("Content-Disposition: inline; filename="generated_image.png");
?>