PHPでリモートファイルのファイルサイズを取得する最も簡単な方法は?

StackOverflow https://stackoverflow.com/questions/1401131

  •  05-07-2019
  •  | 
  •  

質問

cURLでヘッドリクエストを行うことを考えていましたが、これが進むべきかどうか疑問に思っていましたか?

役に立ちましたか?

解決

はい。ファイルはリモートであるため、 Content-Length ヘッダーの値に完全に依存しています(ファイル全体をダウンロードする場合を除く)。 curl_setopt($ ch、CURLOPT_NOBODY、true)および curl_setopt($ ch、CURLOPT_HEADER、true)が必要です。

他のヒント

KISSの原則に従う最適なソリューション

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

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リクエストを使用しています-それでも、リモートサーバーが正しいContent-lengthヘッダーを送信することに依存しています。


考えられるもう1つのオプションは、 filesize を使用することです。しかし、これは失敗します:ドキュメントには(quoting)と記載されています:

  

PHP 5.0.0以降、この関数は   一部のURLラッパーでも使用できます。   サポートされるリストを参照してください   リストのプロトコル/ラッパー   ラッパーがstat()をサポートする   機能のファミリー。

そして、残念ながら、 HTTPおよびHTTPSラッパー stat ()はサポートされていません...

実行しようとすると、次のようなエラーが表示されます。

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

悪すぎる:-(

HEADリクエストを使用して Content-Length を確認するのが標準的な方法ですが、サーバーがサポートしていない可能性があるため、一般的にこれに依存することはできません。 Content-Length ヘッダーはオプションであり、さらにサーバーはHEADメソッドを実装しない場合があります。調査しているサーバーがわかっている場合は、それが機能するかどうかをテストできますが、一般的な解決策としては完全な証拠ではありません。

防弾ソリューションが必要ない場合は、次のようにします。

strlen(file_get_contents($url));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top