php curl 在不读取完整图片的情况下获取图片大小
来源:互联网 发布:数据质量维度 编辑:程序博客网 时间:2024/06/05 03:16
此事的起因是同事做微信投票,遇到一个问题。从微信服务器下载用户头像时极卡,平均在1分钟左右。图片才十几k而已。当时用的是file_get_contents函数,我分析有可能是微信头像的地址没有图片格式或者服务器的问题,导致file_get_contents不知道什么时候结束。所以用curl改造了一个方法,先通过头信息获取图片大小,然后用file_get_contents指定获取字节。事实证明可行,速度极快,而且图片完整。
ps:对于服务器设置不返回文件大小这种方法就无效了。
function getUriLen($uri,$user='',$pw=''){ ob_start(); $ch = curl_init($uri); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); //nobody是关键 if (!empty($user) && !empty($pw)) { $headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $okay = curl_exec($ch); curl_close($ch); $head = ob_get_contents(); ob_end_clean(); $regex = '/Content-Length:\s+(.+)/'; preg_match($regex, $head, $matches); print_r("<pre>"); print_r ($head); print_r ($matches); print_r("</pre>"); return $matches[1]; }$url = "http://avatar.csdn.net/8/E/F/3_u011478276.jpg";$len = getUriLen($url);$a = file_get_contents($url,null,null,0,$len);echo $a;
测试图片为我的头像,header信息如下
HTTP/1.1 200 OKServer: TengineContent-Type: image/jpegContent-Length: 13020Connection: keep-aliveDate: Fri, 16 Dec 2016 01:02:36 GMTx-oss-request-id: 58533D2C6C6742DF40F6EBE5Accept-Ranges: bytesETag: "77454815F646118A95F09CCA45E65232"Last-Modified: Fri, 16 Dec 2016 01:01:22 GMTx-oss-object-type: Normalx-oss-hash-crc64ecma: 14417696360285702792Cache-Control: max-age=86400Content-MD5: d0VIFfZGEYqV8JzKReZSMg==x-oss-server-time: 4Via: cache19.l2nu17[0,200-0,H], cache7.l2nu17[0,0], kunlun4.cn386[0,200-0,H], kunlun4.cn386[0,0]Age: 21102X-Cache: HIT TCP_MEM_HIT dirn:9:781590905X-Swift-SaveTime: Fri, 16 Dec 2016 02:47:19 GMTX-Swift-CacheTime: 31104000Access-Control-Allow-Origin: http://my.csdn.netTiming-Allow-Origin: *EagleId: ca61e70414818712586162101e
函数获取图片大小的报头
Cache-Control:max-age=0Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:657
Content-Type:text/html; charset=utf-8
Date:Fri, 16 Dec 2016 06:57:33 GMT
Expires:Fri, 16 Dec 2016 06:57:33 GMT
Keep-Alive:timeout=5, max=100
Server:Apache
Vary:Accept-Encoding
根据两个报头可见,图片为13k,获取图片大小的请求不到1k。利用很小的代价,解决问题,多一次请求还是可行的。
1 0
- php curl 在不读取完整图片的情况下获取图片大小
- php curl 获取数据不完整
- 获取进程信息在Realease下路径不完整的情况分析
- 在不加载图片的情况下读取图片宽高
- php获取数据为什么curl获取不完整
- 安卓 图片大小不变的情况下裁剪图片
- 在不改变大小的情况下,如何以最省内存的方式读取本地资源的图片
- 用CFindFile()读取文件下的图片,当图片名为数字时,不按照顺序读取的情况
- PHP图片裁剪之获取图片大小getimagesize
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 有没有方法在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- 在不root手机的情况下读取Data目录下的文件
- tomcat 使用第三方机构ca证书
- 对Java 对象 序列化 与 反序列化的 解读
- Android studio插件GsonFormat的使用
- Android中热修复框架Robust原理解析+并将框架代码从"闭源"变成"开源"(上篇)
- ffmpeg 解析aac adts格式的文件
- php curl 在不读取完整图片的情况下获取图片大小
- ABAP DOI详解(1)
- git 出现 no branch的分支
- jenkins + maven + svn + tomcat+nexus 自动部署
- java List对象排序方法
- Development | WebRTC
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
- 云客Drupal8源码分析之渲染数组(render array)
- Template7