使用PHP发送特定图像

时间:2013-08-15 12:30:34

标签: php image

我想要一张PNG图片,但是当访问它时,它运行一个PHP脚本,PHP脚本应该决定发送什么图片(使用一些if语句等等)。然后PHP脚本应该从我的Web服务器上的某个地方读取图像文件并输出它。

这是问题,如果我得到一个.png文件,并在其中放入PHP代码,它就不会工作,但是,如果我使用.php扩展名,它可以工作,我甚至可以嵌入将图像写入其他网站,PHP可以决定要发送的图像,但如果我想直接查看该图像(将其复制到我的地址栏中)它不起作用,它会给我图像普通内容(随机乱码)。

任何人都知道该怎么做?

这也是我关于Stack Overflow的第一个问题 - 如果我做错了,请告诉我。

4 个答案:

答案 0 :(得分:7)

您需要发送Content-Type标题。

png

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

其他人将png更改为jpggifbmp或其他任何内容。

请注意,在将任何内容写入输出之前,必须使用header()函数。

答案 1 :(得分:2)

首先,请确保您的图像 image.png 可以通过php访问。

然后创建一个php脚本 image.php

<?php
header('Content-Type: image/png');
readfile('image.png');

现在脚本就像是一张PNG图像。

答案 2 :(得分:2)

听起来您知道如何发送图片,您的问题是您希望网址看起来像是PNG图片。

你可以做几件事。首先,如果您的Web服务器支持URL重写(如Apache的mod_rewrite模块),您可以使用重写规则,以便用户像http://example.com/generated_image.png那样访问脚本,但您的服务器将翻译/重写此URL直接指向您的PHP脚本,如/var/www/image_generator.php

另一种选择是将脚本命名为“generated_image.png”,但强制您的网络服务器将其视为PHP脚本。例如,在Apache中你可以尝试类似的东西:

<Location /generated_image.png>
    ForceType application/x-httpd-php
</Location>

最后请注意,如果您实际上并不担心URL,但担心如果用户决定将其保存到磁盘时使用的文件名,则只需使用Content-Disposition HTTP标头即可在你的回复中。在PHP中,它看起来像这样:

<?php
header("Content-Disposition: inline; filename="generated_image.png");
?>

这样,URL无关紧要,如果用户通过Web浏览器保存图像,Web浏览器应提供“generated_image.png”作为默认文件名。

答案 3 :(得分:1)

我知道最简单的版本......

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

然后,您将其视为图像文件。也就是说,如果这是“pngmaker.php”,则在HTML文档中执行

<img src="pngmaker.php">

你甚至可以做

<img src="pngmaker.php/?id=123&user=me">