2012-02-29 26 views
1

私はウェブからファイルをアップロードするのではなく、URLからプロフィール画像をアップロードすることができます。私はいたずらなユーザーが巨大なファイルのURLを提供することができますか、または/dev/randomにテールされているいくつかのURLかもしれないが、非常に起こりえない可能性があります。それは私のサーバーに完全にフェッチする前にファイルのサイズを判断する方法はありますか?PHP curlを使用してフェッチする前にファイルサイズを調べる方法

+0

正確な複製:http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file –

+0

@Topener:そのトピックはOPを**元の**を解決するのに役立ちません問題。 *ときどき*全体の質問*を読む価値があります。 – zerkms

+0

@Topener私は検索に使うべきものを決して見つけられませんでした。 –

答えて

0

サーバーからの応答のContent-Lengthヘッダーを確認します。

+0

応答にそのようなヘッダーがない場合はどうなりますか? – zerkms

+2

彼らは 'Content-Length:123'を提供したが、それよりも実際に(全体として)送信したらどうなるでしょうか? – rodneyrehm

1

リモートファイルを取得するために何をしているかによって、実行できる操作が異なります。

  • file_get_contents('http://foobar.com')は非常に便利ですが、最小限の制御が可能です。 Content-Lengthヘッダーを手に取るHEAD要求をどうやって行うことができないのか分かりません。
  • fsockopen()は、HTTPSを扱うときに泣くようになります。
  • カールは、うまくカールしています。それは強力なほど醜いものです。 HTTP Pecl(基本的にカールを巻きつける)のような他のオプションもあります。

    1. リソースがContent-Lengthヘッダーを提供しているかどうかを確認します。このためにHEADリクエストを行います。一部のサーバー/サービスはHEAD要求を処理しません。応答ヘッダーを取得したら、GETリクエストを行い、転送を中止します。
    2. 結果が(1)である場合は、それがあなたの限界よりも大きいかどうかを確認してください。もしそうなら、中止してください。
    3. curlを使用してリソースを取得します。ボリュームが上限を超えた場合は、ダウンロードを中止できるようにCURLOPT_READFUNCTIONをご覧ください。また、(1)結果が偽装されている可能性があるため、結果を得た場合はこれをチェックする必要があります。あなたは$ yourLimitバイトをダウンロードするには1頭とコンテンツの長さを取得するための1つのGETリクエストだけでなく、別のGET要求を行ってきたよ非常に最悪の場合

関連する問題