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


Posted in PHP onDecember 25, 2013

如果要获取远程图片的大小,一种普遍的做法是先将远程图片的内容获取回来,再用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。

PHP 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
实现获取http内容的php函数分享
Feb 16 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
php构造函数与析构函数
Apr 23 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 PHP
php对数组排序的简单实例
Dec 25 #PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 #PHP
php中apc缓存使用示例
Dec 25 #PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 #PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 #PHP
zend framework文件上传功能实例代码
Dec 25 #PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 #PHP
You might like
php输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
基于Django的python验证码(实例讲解)
2017/10/23 Python
python生成随机图形验证码详解
2017/11/08 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
python 获取计算机的网卡信息
2021/02/18 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
出生公证委托书
2014/04/03 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
通知格式
2015/04/27 职场文书