在PHP中获取远程文件大小的最简单方法?

2022-08-30 20:12:49

我正在考虑使用cURL进行头部请求,想知道这是否是要走的路?


答案 1

遵循KISS原则的最佳解决方案

$head = array_change_key_case(get_headers("http://example.com/file.ext", 1));
$filesize = $head['content-length'];

答案 2

我猜使用curl发送HEAD请求是一个很好的可能性;像这样的东西可能会做:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
var_dump($size);

并会得到你:

float 3438

这样,您使用的是HEAD请求,而不是下载整个文件 - 但是,您仍然依赖于远程服务器发送正确的内容长度标头。


您可能会想到的另一个选项是使用文件大小...但这将失败:文档指出(引用):

从 PHP 5.0.0 开始,此函数也可以与某些 URL 包装器一起使用。有关哪些包装器支持 stat() 系列功能的列表,请参阅支持的协议/包装器列表。

而且,不幸的是,对于HTTP和HTTPS包装器,不支持...stat()

如果您尝试,您将收到错误,如下所示:

Warning: filesize() [function.filesize]: stat failed 
    for http://sstatic.net/so/img/logo.png

太糟糕了:-(


推荐