我真的不懂任何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
(重新加载页面几次!)
答案 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;
答案 3 :(得分:0)
如果我还没有包含'Content-Length:'标题,我发现了问题。问题是爬虫,代理和浏览器缓存相关。在最坏的情况下,浏览器会等到超时才能获得更多数据。
它符合规范'并解决了所有问题所以即使现代浏览器可以在没有它的情况下工作,我也总是把它包括在内。谁知道,由于浏览器不知道何时收到最后一段,因此可能会有一点延迟。
我在这里看到的另一个问题是你假设一个.png图像格式。 最好为此目的创建一个特定的功能,以便您可以重复使用它。
function returnImage( $path ) {
header( 'Content-Type: image/' . substr($path, -3) );
header( 'Content-Length: ' . filesize( $path ) );
readfile( $path );
exit;
}
我在这里做了很多假设(比如文件存在且扩展名是3个字符)但是这个序列似乎是我经验中的银弹。