【问题标题】:getimagesize does not work with images that contain latin/special charsgetimagesize 不适用于包含拉丁/特殊字符的图像
【发布时间】:2013-11-17 23:40:03
【问题描述】:

当我尝试获得这样的图像大小时

$size=getimagesize(realpath('http://www.index.hr/images2/ivandžaferovic-fejs.jpg'));

上面写着:

警告: getimagesize(http://www.index.hr/images2/ivandžaferovic-fejs.jpg) [function.getimagesize]:打开流失败:HTTP 请求失败! HTTP/1.0 400 错误请求 第 4 行的 test.php -bool(假)

这是因为图片中的“ž”字符。没有它,功能确实有效。该怎么办

【问题讨论】:

    标签: php


    【解决方案1】:

    如果你 urlencode 文件名,它可以工作:

    $size = getimagesize('http://www.index.hr/images2/'.urlencode('ivandžaferovic-fejs.jpg'));
    
    print_r($size);
    

    pathinfo 的更多动态示例:

    $url = pathinfo('http://www.index.hr/images2/ivandžaferovic-fejs.jpg');
    $size = getimagesize($url['dirname'].'/'.urlencode($url['basename']));
    print_r($size);
    

    parse_url 的另一个例子:

    $urlArray = parse_url('http://www.portal.com/ResourceManager/GetImage.aspx?imgId=619389&fmtId=99');
    
    $url = ($urlArray['scheme'].'://'.$urlArray['host'].str_replace('%2F', '/', urlencode($urlArray['path'])));
    $url .= isset($urlArray['query']) ? '?'.$urlArray['query'] : '';
    
    $size = getimagesize($url);
    print_r($size);
    

    它应该适用于大多数情况。必须给出方案(http、https 等),否则 parse_url 将不包含 host 而仅包含 path 数组键。因此,要构建一个通用且完美的解决方案,您将不得不花费更多时间(编写更多代码)来解析 url。

    【讨论】:

    • 问题是不是每个图片 url 都是这样的。有些没有特殊字符:/
    • urlencode 不应阻止其他文件。所以应该没问题。
    • 如果我这样做它不起作用:getimagesize(urlencode('index.hr/images2/ivandžaferovic-fejs.jpg'));
    • 这行得通,但它会在 GetImage.aspx 之后弄乱其他图片,如 portal.com/ResourceManager/…... 我想我必须让它比你给我的更复杂,并使用一些 if/else跨度>
    • 如果图像 url 的差异很大,那么很难找到通用的解决方案。但是请查看我的更新parse_url
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2014-08-09
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多