在php文件中返回图像的内容?

时间:2010-12-20 22:41:26

标签: php image

我真的不懂任何PHP,但我喜欢做一件简单的事情:
我从<img src="/myhumbleimage.php" />内访问一个php页面,我想从另一个URL返回一个图像。


我想出了:

<?php
header('Content-Type: image/png');
readfile('i' . rand(1,3) . '.png');
exit;

它有效:
Avatar selection http://vercas.webuda.com/img.php?.png
(重新加载页面几次!)

4 个答案:

答案 0 :(得分:16)

查看readfile()

基本思路是发送相应的MIME类型标头(使用header()),然后使用readfile()传递文件内容。

例如

<?php
// myhumbleimage.php

// Do whatever myhumbleimage.php does before the image is delivered

header('Content-Type: image/jpeg');
readfile('path/or/url/of/image/file.jpg');
exit;

答案 1 :(得分:1)

为什么不直接引用图像呢?如果您试图隐藏从外部源提取图像的事实,该外部源仍然可以告诉您正在拉动图像。

否则,使用适当的mime-type传递Content-Type标头并回显file_get_contents($imageUrl)的结果。

答案 2 :(得分:1)

只需生成或读取,然后使用PHP输出图像。

...get image data from file or dynamically...
header('Content-type: image/png'); //or whatever MIME type

print $imgdata;

或者查看此内容:http://php.net/manual/en/function.imagepng.php

答案 3 :(得分:0)

如果我还没有包含'Content-Length:'标题,我发现了问题。问题是爬虫,代理和浏览器缓存相关。在最坏的情况下,浏览器会等到超时才能获得更多数据。

它符合规范'并解决了所有问题所以即使现代浏览器可以在没有它的情况下工作,我也总是把它包括在内。谁知道,由于浏览器不知道何时收到最后一段,因此可能会有一点延迟。

我在这里看到的另一个问题是你假设一个.png图像格式。 最好为此目的创建一个特定的功能,以便您可以重复使用它。

function returnImage( $path ) {
  header( 'Content-Type: image/' . substr($path, -3) );
  header( 'Content-Length: ' . filesize( $path ) );
  readfile( $path );
  exit;
}

我在这里做了很多假设(比如文件存在且扩展名是3个字符)但是这个序列似乎是我经验中的银弹。