php curl 在不读取完整图片的情况下获取图片大小

2024-06-09 10:18

本文主要是介绍php curl 在不读取完整图片的情况下获取图片大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此事的起因是同事做微信投票,遇到一个问题。从微信服务器下载用户头像时极卡,平均在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 OK
Server: Tengine
Content-Type: image/jpeg
Content-Length: 13020
Connection: keep-alive
Date: Fri, 16 Dec 2016 01:02:36 GMT
x-oss-request-id: 58533D2C6C6742DF40F6EBE5
Accept-Ranges: bytes
ETag: "77454815F646118A95F09CCA45E65232"
Last-Modified: Fri, 16 Dec 2016 01:01:22 GMT
x-oss-object-type: Normal
x-oss-hash-crc64ecma: 14417696360285702792
Cache-Control: max-age=86400
Content-MD5: d0VIFfZGEYqV8JzKReZSMg==
x-oss-server-time: 4
Via: cache19.l2nu17[0,200-0,H], cache7.l2nu17[0,0], kunlun4.cn386[0,200-0,H], kunlun4.cn386[0,0]
Age: 21102
X-Cache: HIT TCP_MEM_HIT dirn:9:781590905
X-Swift-SaveTime: Fri, 16 Dec 2016 02:47:19 GMT
X-Swift-CacheTime: 31104000
Access-Control-Allow-Origin: http://my.csdn.net
Timing-Allow-Origin: *
EagleId: ca61e70414818712586162101e

函数获取图片大小的报头

Cache-Control:max-age=0
Connection: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。利用很小的代价,解决问题,多一次请求还是可行的。

这篇关于php curl 在不读取完整图片的情况下获取图片大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044899

相关文章

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核