我正在尝试使用cURL获取远程文件“compiler-latest.zip”(googlecode.com)的文件大小而不实际下载它,这是我的PHP代码:
$url = 'http://closure-compiler.googlecode.com/files/compiler-latest.zip';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // optional
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // optional
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // optional
$result = curl_exec($ch);
$filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
print 'Filesize: ' . $filesize . '<br><br>';
print_r($result);
但是,我得到了“HTTP / 1.1 404 Not Found”状态,其文件大小(1379字节)是此错误404文档。 因此,如果我设置(CURLOPT_NOBODY,0),它会下载文件并返回正确的文件大小(当前为3820320字节)。我的问题是如何获得“compiler-latest.zip”文件的正确文件大小而不下载它?
重要提示:此代码与googlecode.com之外的任何其他网址一样正常工作。
答案 0 :(得分:2)
使用 get_headers 功能:
<?php
$headers = get_headers('http://closure-compiler.googlecode.com/files/compiler-latest.zip');
$content_length = -1;
foreach ($headers as $h)
{
preg_match('/Content-Length: (\d+)/', $h, $m);
if (isset($m[1]))
{
$content_length = (int)$m[1];
break;
}
}
echo $content_length;
答案 1 :(得分:1)
当内容长度丢失时,如何获取文件大小?