【发布时间】:2010-08-20 03:22:00
【问题描述】:
我正在努力使用 PHP 的 GD 库。
我编写了一个名为 foo.php 的脚本,它输出一个 png:
header('Content-type:image/png');
$img = imagecreatefrompng($url) or die('bad url:'.$url);
imagepng($img);
imagedestroy($img);
它工作正常。它的目的是接受一个 GET 参数,然后吐出相应的图表:
(例如)foo.php?id=2 在任何浏览器中放置一个漂亮的图表。
这是我的问题:
在另一个脚本 (baz.php) 中,我想使用readfile 或类似的东西来获取由 foo.php 创建的图像并将 baz.php 发送到浏览器。 但是无论我怎么尝试,当我调用 baz.php 时它似乎都不起作用
来自 baz.php 的示例:
switch($id) {
case '1':
readfile('foo.php?id=1');
break;
case '2':
readfile('foo.php?id=2');
break;
// and so on...
}
我收到一条错误消息:
failed to open stream: No such file or directory...
如果我输入完整的网址或路径:
readfile('http://localhost/dev/foo.php?id=1');
readfile('C:/xampp/htdocs/dev/foo.php?id=1');
...我得到同样的错误。
如果我将标题添加到 baz.php:
header('Content-type:image/png');
readfile($url);
在 Firefox 中,我得到“无法显示图像“http://localhost/dev/baz.php”,因为它包含错误。在 Chrome 中,它显示大小为 27.82kb 且尺寸为 0x0 的损坏图像
allow_url_fopen 已打开,正如我所提到的,foo.php 正在生成 png 没有任何问题;我似乎无法退出 baz.php,我需要这样做。
我可以,例如:
header("Location: foo.php?id=1");
它会重定向并输出图像,但我不想做302重定向,我需要baz.php将图像推送到浏览器。如果我保存文件作为静态文件,它也会加载得很好。 它似乎不想处理动态文件。
非常感谢任何帮助。提前致谢。
【问题讨论】:
-
这应该可以工作
readfile('http://localhost/dev/foo.php?id=1');是localhost从服务器的角度来看是正确的主机名吗? -
@Pekka - 我知道应该。但事实并非如此。重申一下,如果我执行 readfile('localhost/dev/foo.php?id=1') 我会收到打开失败错误。如果我将localhost/dev/foo.php?id=1 粘贴到浏览器中,它会正常打开。如果我将图像保存为 temp_foo.png 并执行 readfile('temp_foo.png') that 也可以正常打开。 localhost 是正确的主机。 (仅供参考,正在删除“http”,但它就在那里)。