Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP发送某个图像_Php_Image - Fatal编程技术网

使用PHP发送某个图像

使用PHP发送某个图像,php,image,Php,Image,我想有一个PNG图片,但当访问它时,它运行一个PHP脚本,PHP脚本应该决定发送什么图片(使用一些if语句和其他什么)。然后PHP脚本应该从web服务器上的某个地方读取图像文件并输出它 问题是,如果我得到一个.png文件,并将PHP代码放入其中,它将无法工作,但是,如果我使用.PHP扩展名,它可以工作,我甚至可以将图像嵌入其他网站,PHP可以决定发送什么图像,但如果我想直接查看该图像(将其URL复制到我的地址栏中),它将无法工作,它为我提供了简单内容的图像(随机jibberish) 有人知道该怎

我想有一个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");
?>