2012-04-11 5 views
3

ダウンロードせずにリモートファイルのサイズを取得する必要があります。このコードを使用しますが、一部のサイトのヘッダーにはContent-Length:フィールドは含まれていません。どのようにファイルサイズを取得できますか?リモートファイルサイズを取得する(Content-Lengthフィールドを使用しない)

$ch = curl_init("http://wordpress.org/latest.zip"); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$data = curl_exec($ch); 
curl_close($ch); 

$contentLength = 'unknown'; 
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) { 
    $contentLength = (int)$matches[1]; 
} 
echo $contentLength; 

これはecho $ dataの結果です。

HTTP/1.1 200 OK 
Server: nginx 
Date: Tue, 10 Apr 2012 11:32:20 GMT 
Content-Type: application/zip 
Connection: close 
Pragma: no-cache 
Cache-control: private 
Content-Description: File Transfer 
Content-Disposition: attachment; filename=wordpress-3.3.1.zip 
Content-MD5: d6332c76ec09fdc13db412ca0b024df9 
X-nc: EXPIRED luv 139 
+0

ヘッダーが返されるかもしれませんが、名前は小文字の 'content-length'ですか?または、コロンと実際の値の間に空白があります。 – Cyclonecode

+0

'echo $ data'はコンテンツとヘッダを表示します – safarov

+0

@safarov、私は質問にecho $ dataの結果を追加しました。 – artaskerov

答えて

0

Content-Lengthヘッダーが存在しない場合は、ファイルサイズが不明であることを意味します。あなたのケースでは、Content-Dispositionヘッダーがあります。これは、ダウンロード可能なファイルがサーバーの応答への添付ファイル(電子メールの添付ファイルと同じ)であることを意味します。だからContent-Lengthヘッダがなければサイズを取得できません。

関連する問題