PHP cURL 获取远程文件大小的方法

一只小鹿
一只小鹿
发布时间:2026-10-13| 6人浏览过
原创

在使用 PHP 处理远程资源时,有时仅需知晓文件大小而无需下载全部内容。本文将介绍如何通过 cURL 库模拟 HEAD 请求,以极低开销获取远程文件的 Content-Length。

原理说明

HTTP 协议中,HEAD 请求与 GET 请求类似,但服务器响应时不包含响应正文(Body),仅返回响应头(Headers)。因此,我们可以通过设置 cURL 选项使其仅获取头部信息,再从 Content-Length 字段中提取字节数,实现零数据传输大小查询。

代码实现

第一步:初始化 cURL 会话并配置选项

调用 curl_init() 初始化会话,传入目标 URL。关键步骤是设置两个核心选项:

  • CURLOPT_HEADER = true:确保响应中包含 HTTP 头部信息。
  • CURLOPT_NOBODY = true:告诉 cURL 不接收响应正文,仅模拟 HEAD 请求。
/* 
** 功能: 获取远程文件的大小, 返回值的单位是: 字节 
*/
function get_fileSize($url){ 
    // 检查参数有效性
    if(!isset($url) || trim($url)==''){ 
        return ''; 
    } 
    
    // 开启输出缓冲以防出现警告或错误混合进抓取内容
    ob_start(); 
    $ch = curl_init($url);
    
    // 设置 cURL 选项:只获取头部,不获取主体
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_NOBODY, 1); 
    
    // 执行请求
    $okay = curl_exec($ch);
    
    // 关闭连接
    curl_close($ch);
    
    // 清理并获取输出的头部字符串
    $head = ob_get_contents(); 
    ob_end_clean(); 
    
    // 正则匹配 Content-Length
    // 注意:部分服务器可能不返回 Content-Length,需做兼容处理
    $regex = '/Content-Length:\s([0-9]+)?\s/'; 
    $count = preg_match($regex, $head, $matches);
    
    // 验证匹配结果是否为有效数字
    if(isset($matches[1]) && is_numeric($matches[1])){
        return $matches[1];
    }
    
    return '';
}

注意事项与优化建议

超时设置

在实际生产环境中,务必为 cURL 设置超时时间(CURLOPT_TIMEOUT 和 CURLOPT_CONNECTTIMEOUT),防止因网络延迟或目标服务器无响应导致脚本挂起。

兼容性处理

并非所有 HTTP 服务器都会在 HEAD 请求中返回 Content-Length,尤其是动态生成的文件或未配置完整元数据的情况。代码中已通过正则和非空判断进行兜底,若无法获取则返回空字符串,调用方应据此做异常处理。

性能对比

相比 GET 请求下载全文后计算长度,HEAD 方式在网络带宽消耗上几乎为零,显著提升了批量检测文件状态时的系统吞吐量。

总结

上述即为使用 PHP cURL 获取远程文件大小的详细内容,更多关于 PHP 网络编程优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。