欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php查看请求头信息获取远程图片大小的方法分享

程序员文章站 2023-12-04 08:00:39
如果要获取远程图片的大小,一种普遍的做法是先将远程图片的内容获取回来,再用strlen计算长度,这种方法需要将图片下载下来,然后才能计算。如果图片很大的话,那么网络传输就要...

如果要获取远程图片的大小,一种普遍的做法是先将远程图片的内容获取回来,再用strlen计算长度,这种方法需要将图片下载下来,然后才能计算。如果图片很大的话,那么网络传输就要花费不少时间,效率显然低下。笔者提供一个方法来提高效率,主要是利用http的头信息。

当访问网页的时候,服务器会返回请求的头信息,其中content-length表示请求的网页内容大小。如果请求的是图片,那么content-length就表示图片的大小。根据这个,只需要发送head请求获取返回的头信息就ok了。在php中,可以通过fsockopen方法获取头信息。代码如下:

复制代码 代码如下:

$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);
if ($fp) {
    //这里请求设置为head就行了
    $out = "head /img/baidu_sylogo1.gif http/1.1\r\n";
    $out .= "host: www.baidu.com\r\n";
    $out .= "connection: close\r\n\r\n";
    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。