php怎么高效获取远程图片尺寸

php怎么高效获取远程图片尺寸,第1张

/

  获取远程的宽高和体积大小

 

  @param string $url 远程的链接

  @param string $type 获取远程资源的方式, 默认为 curl 可选 fread

  @param boolean $isGetFilesize 是否获取远程的体积大小, 默认false不获取, 设置为 true 时 $type 将强制为 fread 

  @return false|array

 /

function myGetImageSize($url, $type = 'curl', $isGetFilesize = false) 

{

    // 若需要获取体积大小则默认使用 fread 方式

    $type = $isGetFilesize  'fread' : $type;

 

     if ($type == 'fread') {

        // 或者使用 socket 二进制方式读取, 需要获取体积大小最好使用此方法

        $handle = fopen($url, 'rb');

 

        if (! $handle) return false;

 

        // 只取头部固定长度168字节数据

        $dataBlock = fread($handle, 168);

    }

    else {

        // 据说 CURL 能缓存DNS 效率比 socket 高

        $ch = curl_init($url);

        // 超时设置

        curl_setopt($ch, CURLOPT_TIMEOUT, 5);

        // 取前面 168 个字符 通过四张测试图读取宽高结果都没有问题,若获取不到数据可适当加大数值

        curl_setopt($ch, CURLOPT_RANGE, '0-167');

        // 跟踪301跳转

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

        // 返回结果

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

 

        $dataBlock = curl_exec($ch);

 

        curl_close($ch);

 

        if (! $dataBlock) return false;

    }

 

    // 将读取的信息转化为路径并获取信息,经测试,这里的转化设置 jpeg 对获取png,gif的信息没有影响,无须分别设置

    // 有些虽然可以在浏览器查看但实际已被损坏可能无法解析信息 

    $size = getimagesize('data://image/jpeg;base64,' base64_encode($dataBlock));

    if (empty($size)) {

        return false;

    }

 

    $result['width'] = $size[0];

    $result['height'] = $size[1];

 

    // 是否获取体积大小

    if ($isGetFilesize) {

        // 获取文件数据流信息

        $meta = stream_get_meta_data($handle);

        // nginx 的信息保存在 headers 里,apache 则直接在 wrapper_data 

        $dataInfo = isset($meta['wrapper_data']['headers'])  $meta['wrapper_data']['headers'] : $meta['wrapper_data'];

 

        foreach ($dataInfo as $va) {

            if ( preg_match('/length/iU', $va)) {

                $ts = explode(':', $va);

                $result['size'] = trim(array_pop($ts));

                break;

            }

        }

    }

 

    if ($type == 'fread') fclose($handle);

 

    return $result;

}

 

// 测试的链接

echo '<pre>';

$result = myGetImageSize('>

程序没问题,能得到网页内容并输出。

有可能是你的 xxxphp 没有重定向成功。

如果在Linux下,可以先用

wget >

以上就是关于php怎么高效获取远程图片尺寸全部的内容,包括:php怎么高效获取远程图片尺寸、HTTP入门(一):在Bash中curl查看请求与响应、php使用curl访问的页面中,出现重定向时, 如何获取重定向后的内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9528976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存