我正在考慮用cURL做頭部請求,想知道這是否是要走的路?最簡單的方法來抓取PHP中的遠程文件的文件大小?
回答
是的。由於該文件是遠程文件,因此您完全依賴於Content-Length
標題的值(除非要下載整個文件)。你會想要curl_setopt($ch, CURLOPT_NOBODY, true)
和curl_setopt($ch, CURLOPT_HEADER, true)
。
我猜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請求,而不是下載整個文件 - 你,依舊取決於遠程服務器發送正確的內容長度標題。
你可能會考慮將使用filesize
另一種選擇......但是這將失敗:文檔指出(引用):
自PHP 5.0.0,這函數 也可以與一些URL包裝一起使用。 請參閱List of Supported Protocols/Wrappers以獲取列表 ,其中包裝程序支持stat() 功能族。
而且,不幸的是,與HTTP and HTTPS wrappers,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));
這會起作用,但它也會先下載文件。據推測,他想在通過網絡獲取大小之前知道大小。 – troelskn 2009-09-10 09:08:10
隨後KISS原則
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
迄今爲止最好的答案。做得很好。 – 2012-10-10 23:06:39
這條命令不會爲我返回一個'content-length'鍵,這裏有返回的數組:''''''''''''''''''''''''''''''''''' 03 Jun 2014 20:55:55 GMT'(長度= 29) 'server'=> string'Microsoft-IIS/6.0'(length = 17) 'x-powered-by'=> string'ASP。NET''(length = 7) 'x-aspnet-version'=> string'4.0.30319'(length = 9) 'cache-control'=> string'private'(length = 7) 'content-type '=> string'image/gif'' – 2014-06-03 20:57:45
快速問題,爲什麼它需要array_change_key_case? – mario 2015-03-20 13:52:05
- 1. 連接具有最大文件大小的文件的簡單方法
- 2. 簡單的方法來測試某個文件大小的PDF
- 3. PHP,確定遠程文件的大小
- 4. 獲取文件夾大小的簡單方法(ObjC/Cocoa)?
- 5. 遠程讀取的最大文件大小
- 6. 最簡單的方法來記錄文件讀取操作
- 7. 使用文件大小讀取遠程文件大小
- 8. 簡單的php文件列表 - 文件大小不工作
- 9. 獲取遠程託管文件的文件大小
- 10. Ruby - 讀取zip文件中文本文件的最簡單方法
- 11. 最簡單的方法來驗證和讀取.net中的xml文件?
- 12. 簡單的方法來鎖定遠程計算機上的文件(窗口)?
- 13. 如何抓取遠程最新的maven tar.gz文件?
- 14. 以編程方式打開chm文件的最簡單方法?
- 15. 最簡單的方法來消除文本文件中的某些模式
- 16. 在PHP中讀取大文件的最佳方法是什麼?
- 17. 最好的方法來下載遠程文件
- 18. 最簡單的方法來存儲整個文件結構?
- 19. 電子郵件附件中的最大文件大小PHP codeigniter
- 20. 使用php讀取遠程文件的最佳做法
- 21. 更好的方式來獲取遠程文件類型來取代PHP的getimagesize()?
- 22. 簡單的方法來枚舉phing中的文件集中的文件
- 23. 什麼是最簡單的方式下載PHP中的文件
- 24. 異步讀取/寫入文件的最簡單方法?
- 25. 什麼是從gfortran讀取.dbf文件的最簡單方法
- 26. 使用jQuery表單驗證遠程方法驗證上傳的文件大小
- 27. 將大文件讀取和分割爲多個小文件的最佳方法
- 28. 最簡單的多個文件上傳與最小的「插件」
- 29. PHP:最簡單的方法來刪除文件夾(包括其內容)
- 30. 用Python編程虛擬文件系統的最簡單方法
是,這樣做的最好的解決辦法:HTTP:// PHP。 net/manual/en/function.get-headers.php – Merlinox 2012-06-01 21:28:55