3

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

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

有谁知道该怎么做?

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

4

4 回答 4

8

您需要发送Content-Type标头。

对于png

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

对于其他人更改pngjpggifbmp或其他。

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

于 2013-08-15T12:33:49.920 回答
2

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

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

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

该脚本现在的行为就像是一个 PNG 图像。

于 2013-08-15T12:34:53.973 回答
2

听起来您知道如何发送图像,您的问题是您希望 URL 看起来像 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”作为默认文件名。

于 2013-08-15T12:46:09.923 回答
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">
于 2013-08-15T12:37:24.880 回答