php使用请求头信息获取远程图片大小

发布时间:2020-06-15编辑:脚本学堂
本文介绍下,php通过fsockopen方法获取头信息的方法,可以通过Content-Length得到图片的大小,有需要的朋友参考下。

php编程中,如果要获取远程图片的大小,通常是先将远程图片的内容获取回来,再用strlen计算长度,这种方法需要将图片下载下来,然后才能计算。
如果图片很大的话,那么网络传输就要花费不少时间,效率显然低下。

本文提供一种更高效的方法,利用http的头信息。
当访问网页时,服务器会返回请求的头信息,其中Content-Length表示请求的网页内容大小。
如果请求的是图片,那么Content-Length就表示图片的大小。
根据这个,只需要发送head请求获取返回的头信息就OK了。

在php中,可以通过fsockopen方法获取头信息。
例子:
 

复制代码 代码示例:
<?php
$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);
if ($fp) {
    //这里请求设置为HEAD就行了
    $out = "HEAD /img/baidu_sylogo1.gif HTTP/1.1rn";
    $out .= "Host: www.baidu.comrn";
    $out .= "Connection: Closernrn";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $header = fgets($fp);
        if (stripos($header, 'Content-Length') !== false) {
            $size = trim(substr($header, strpos($header, ':') + 1));
            echo $size;
        }
    }
    fclose($fp);
} else {
    echo "$errstr ($errno)";
}
 

和发起GET请求一样,只需要将请求类型GET设置为HEAD就可以了。
请求的主机和路径,修改成自己需要的即可。

小结:
php也可以使用get_headers来获取头信息,测试过这个函数,是GET请求,详情参考:php函数get_headers是HEAD请求或GET请求
另外,有的服务器可能会屏蔽HEAD请求,如果被屏蔽了,就只能用GET请求了。

如此,可以直接用现成的函数getimagesize来取得图片的大小。