2012-02-29 55 views
1

我提供一個設施,我的互聯網用戶,他們可以從一個網址上傳個人資料圖片而不是從計算機上傳取。我在這裏看到一個惡作劇的用戶可以提供一個巨大的文件的URL或可能是一個URL尾號/dev/random,非常不可能,但可以發生。有沒有一種方法可以在將文件完全取回到我的服務器之前確定文件的大小?如何確定前的文件大小使用PHP捲曲

+0

完全重複:http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file – 2012-02-29 09:26:46

+0

@Topener:該主題不會幫助OP來解決**原始**問題。 *有時*閱讀*整個問題*是值得的。 – zerkms 2012-02-29 09:31:41

+0

@Topener我永遠不知道我應該用什麼來搜索。 – 2012-02-29 09:33:54

回答

0

檢查服務器響應中的Content-Length標頭。

+0

如果響應中沒有這樣的標題,該怎麼辦? – zerkms 2012-02-29 09:28:48

+2

如果他們提供了「Content-Length:123」,但實際上發送了更多的內容? – rodneyrehm 2012-02-29 09:48:54

1

根據你在做什麼來抓取遠程文件,你可以做不同的事情。

  • 雖然file_get_contents('http://foobar.com')是相當方便,它會給你最少的控制。我沒有看到你怎麼可以做頭部請求前面抓住Content-Length頭。
  • fsockopen()將與HTTPS打交道時你哭。
  • 捲曲,很好,捲曲。它和強大一樣醜陋。還有其他選項,比如HTTP Pecl(基本上是捲曲)。

    1. 檢查資源是否提供Content-Length標頭。爲此做一個HEAD請求。某些服務器/服務不處理HEAD請求。在獲得響應標題後,您將發出GET請求並中止傳輸。
    2. 如果(1)得出結果,請檢查它是否大於您的限制。如果是這樣,則中止。
    3. 使用curl來獲取資源。如果音量超出限制,請查看CURLOPT_READFUNCTION以取消下載。如果(1)得出結果,你也應該檢查這個結果,因爲這個結果可能被欺騙了。

在你取得了1頭和1個GET請求獲取內容長度,以及另一個GET請求來下載$ yourLimit字節的最糟糕的情況。