我正在努力使用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将图像推送到浏览器。如果我保存文件作为一个静态文件,它也会加载那么好。 它似乎不想处理动态文件。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
问题#1:
你不能使用php的readfile()
来包含一个由php 动态生成的png,如果它位于同一台服务器上。
为什么呢? 因为readfile将包含原始的PHP代码,而不是将该PHP代码呈现为图像。如果你想从另一台服务器调用它,readfile工作正常。
所以,你可以改为包含/要求文件(所以它会被渲染成png),但是...
问题#2:
您不能直接包含带参数/查询字符串的文件(例如,以下代码会出错,无法打开文件:
include('baz.php?id=1'); //this won't work
$_GET['id'] = 1;
)include('baz.php');
另请注意:Apache的virtual()
命令也不适用于GET,因为只传递了QUERY_STRING($ _GET是从父脚本复制的):