2010-07-12 107 views
2

我閱讀filesize()能夠從遠程文件計算文件大小的手冊。 但是,當我嘗試使用下面的代碼片段執行此操作時。我得到了錯誤PHP Warning: filesize(): stat failed for http://someserver/free_wallpaper/jpg/0000122_480_320.jpg in /tmp/test.php on line 5使用文件大小讀取遠程文件大小

這裏是我的片斷:

$file = "http://someserver/free_wallpaper/jpg/0000122_480_320.jpg"; 
echo filesize($file); 

事實證明,我不能使用HTTP的 文件大小()。案件關閉。我將使用 片段here作爲解決方案的變通解決方案 。

+1

還有的讓網頁URL的文件大小一個較短的解決方法:get_headers($ file_url,1)會給你一個數組,它將(有希望)有一個關鍵字「Content-length」,它的值是文件的字節數。 – Petruza 2010-12-21 19:22:08

回答

2

filesize不適用於HTTP - 它取決於stat,其中isn't supported for the HTTP(S) protocol

的文件大小的PHP手冊頁說:

Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.

這並不意味着每一個協議/包裝工程「開箱即用」與filesize。您可以通過完整地獲取遠程URL並計算返回的數據大小來解決此問題,如果您可以獲取Content-Length頭,則可以嘗試HEAD請求以避免傳輸文件數據。

+0

啊,好的。我想念那個文檔:(。 – ariefbayu 2010-07-12 04:27:30

+0

@silent:用一些可能的解決方法更新了我的答案。 – 2010-07-12 04:29:23

+1

已更新的問題。我已經添加了我將使用的解決方法的鏈接。 – ariefbayu 2010-07-12 04:30:05

0

我不知道你看的。 filesize需要stat,以及基於HTTP wrapper頁面上,我不認爲它在PHP的任何版本支持stat

0

您可能需要使用http_head()進行調查。我想你引用的代碼片段會下載文件來確定文件大小,這可能不是必需的。如果您要引用的Web服務器發回準確的標題信息,則應該能夠確定文件大小,日期修改和其他幾個有用的標識功能。

4

您可以使用下面的代碼

功能getFileSize($文件){

$ch = curl_init($file); 
    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); 
    $contentLength=0; 
    if (preg_match('/Content-Length: (\d+)/', $data, $matches)) { 
     $contentLength = (int)$matches[1]; 

    } 
    return $contentLength; } 
+0

獲取不同的數字...可以解釋原因嗎? ?...即:'$ ch = curl_init('http://www.ehow.co.uk/ui/en-gb/ehow.png'); ///輸出:11402'和'$ ch = curl_init ('http://www.ehow.co.uk/ui/en-gb/ehow.pngjavascript:alert(1);');//輸出:45821'和'$ ch = curl_init('http:// www.ehow.co.uk/ui/en-gb/wrong_path_/'); //輸出:45820'和'$ ch = curl_init('http://www.ehow.co.uk/ui/');輸出:233' .....這使得很難知道哪個數字意味着什麼......更難以正確讀取遠程文件大小** ....任何想法? – ErickBest 2016-03-29 05:14:06