php getimagesize动态创建的图片

时间:2012-06-10 18:38:29

标签: php getimagesize

我正在尝试确定image.php是否是有效的图片文件。它可能是也可能不是因为如果DB有关于已调整大小的图片的信息它将是有效的 - image.php将调整原始图片的大小并将其打印到屏幕上。还有另一种选择 - 数据库中没有文件名信息,它可能导致错误消息或错误图片。我想得到图像的尺寸,如果它是width = 0和height = 0则打印错误信息。我试图用getimagesize来做,但它产生了错误:

[function.getimagesize]:无法打开流:在...中没有这样的文件或目录。

路径100%正确。我已经读过通过php对动态制作的图片进行getimagesize是不可能的。我总是可以检查我的数据库,但我很好奇是否有任何黑客获取通过PHP动态创建的图像大小。

代码:

$file = "image.php?img=1";
$a = getimagesize($file);
echo 'aaaaaaaaa' . $a;

编辑:

我做了另一种方式,因为没有一个解决方案适合我 - 我只是检查数据库是否存在正确的文件名。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

你必须使用PHP的完整绝对网址才能意识到你正在申请网址。 image.php?img=1只是本地文件系统专用请求

$file = 'http://example.com/image.php?img=1'; // full-blown HTTP request
$file = 'image.php'; // local-only request

但这有点低效,因为你正在做一个完整的http往返请求。如果该网址受密码/会话保护,则必须先“登录”,等等......

如果该图像来自本地数据库,那么您应该重新创建提取逻辑或通过函数调用使其可用,这样它就不会执行HTTP请求,而只是在脚本中“内部”工作,然后将数据传递给GD的imagecreatefromstring(),它会接受任何已知的图像类型,然后使用imagesx()imagesy()函数来获取高度/宽度。

答案 1 :(得分:1)

您需要file_get_contents,因为image.php?img=1不是您系统上的真实文件

$cont = file_get_contents($file);
$r = imagecreatefromstring($cont);
imagesx($r);
imagerx($r);

当然,您需要完整的网址:http://etc