【问题标题】:php getimagesize of dynamically created picturephp getimagesize 动态创建的图片
【发布时间】:2012-06-10 18:38:29
【问题描述】:

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

[function.getimagesize]:打开流失败:...中没有这样的文件或目录

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

代码:

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

编辑:

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

感谢您的帮助。

【问题讨论】:

  • getimagesize() 不返回一个数组吗?如果是这样,echo 不会对你有任何好处。

标签: php getimagesize


【解决方案1】:

您必须为 PHP 使用成熟的绝对 url 才能意识到您正在请求一个 url。 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() 函数获取高度/宽度。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 写的一样,但你先写完了。请注意,要发出正确的 http 请求,请使用 $file = 'http://127.0.0.1/image.php?img=1'; 或发出请求所需的任何 URL。
    • 您将无法获得image.php?img=1,它也不会理解您在那里尝试做什么。切换到完整路径或仅在脚本中定义 $_GET['img'] 然后 file_get_contents('image.php');
    • 我最喜欢你的建议,但我得到 imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a identify format in add_picture.php on line 398. 那行是 $r = imagecreatefromstring($cont )。路径没问题,图片没问题,在下面打印了 2 行。不知道为什么会报错:(
    • 发布您的完整代码以及它在您的问题中出现错误的位置。另外,如果您喜欢我的回答,请添加 +1 或将其标记为答案
    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多