これは不可能file_get_contents
です。ファイル サイズを取得するには、PHP cURL 拡張機能を使用する必要があります。
<?php
$max_length = 5 * 1024 * 1024;
$url = 'http://www.spacetelescope.org/static/archives/images/large/heic0601a.jpg';
$ch = curl_init($url);
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);
if ($data === false) {
echo 'cURL failed';
exit;
}
$contentLength = 'unknown';
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
$contentLength = (int)$matches[1];
}
echo "Content-Length: $contentLength\n";
if ($contentLength > $max_length) {
echo "File is too large\n";
} else {
echo "File size is ok\n";
}
これを関数にまとめて、URL のチェックに使用します。大きすぎるものはスキップできます。
欠点:
このメソッドは、Content-Length
ヘッダーがサーバーから返された場合にのみ機能します。すべてのサーバーが適切に動作しているわけではなく、すべてのサーバーが正しい長さを返すわけではありません。
利点:
ダウンロードして$max_length
バイト単位で書き込む必要はありません。この方法はより高速で、リソースの消費が少なくなります。
変更元:
http://php.net/filesize#92462