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 相关文章推荐
PHP安装问题
Oct 09 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
PHP反射API示例分享
Oct 08 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
PHP解决高并发的优化方案实例
Dec 10 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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:风雨欲来 路在何方?
2006/10/09 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
Python入门篇之正则表达式
2014/10/20 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python中self原理实例分析
2015/04/30 Python
详解python基础之while循环及if判断
2017/08/24 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
先进班级集体事迹材料
2014/01/30 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
德劲DE1108畅想
2021/04/22 无线电