2013-12-18 65 views
0

我正在嘗試使用文件大小的php函數來自動在我使用的元標記中寫入文件大小。使用PHP文件大小函數和GET變量

我在做什麼,通常是例如現在

<meta name="DC.format" content="<?= filesize($filename); ?> bytes"> 

,如果這是與下面的語法返回使用:

php 
<meta name="DC.format" content="<?= filesize("index.php"); ?> bytes"> 

resulting html 
<meta name="DC.format" content="6412 bytes"> 

但是,如果使用下面的語法,我得到以下錯誤。

php 
<meta name="DC.format" content="<?= filesize("index.php?locale=en_US"); ?> bytes"> 

resulting html 
<meta name="DC.format" content="<br /><b>Warning</b>: filesize(): 
stat failed for index.php?es=./&amp;en=./en/&amp;locale=en_US in 
<b>D:\xampp\htdocs\casasenmeridabaspul.com-v2\header.php</b> 
on line <b>87</b><br /> bytes"> 

我想的情況是,文件大小是獲得特定文件的文件大小沒有做任何的PHP處理或等。在所有服務器端處理完所有內容後,如何計算生成的文件大小?

有了更詳細一點:

我已經列入其中的index.php前2的header.php,footer.php和index.php文件。我在想也許是捲曲的東西,但我不太熟悉它,所以我會把它留給專家。

在此先感謝。

回答

1

這不是一個文件。它是執行文件的文本輸出。你能做的最好的是strlen()mb_strlen()不使用HTTP的功能/班,我認爲:

<?= strlen(file_get_contents("http://www.example.com/index.php?locale=en_US")); ?> 
+0

'file_get_contents()'將使用HTTP請求。 – ComFreek

+0

@ComFreek:是的,他們傳遞一個查詢字符串。 – AbraCadaver

+0

我想我有一個循環問題。由於index.php包含header.php,並且該函數在header.php中,所以當我要求計算文件大小時,它會再次轉到頭部,從而重複該函數並從不計算任何內容。 我在想也許增加一個額外的$ _GET參數並加以識別。你怎麼看? –

1

您將(無效)本地路徑傳遞到filesize(),因此它會嘗試在您的硬盤上解析它。由於查詢參數使文件名無效,這明顯失敗。

但它是URI的有效部分。因此,您可以啓動一個HTTP請求,並獲取返回的內容的大小:

PHP: Remote file size without downloading file

請記住,這種方法會激發關閉可能影響性能相當多的HTTP請求。

+0

有沒有一種方法來計算的話,而不HTTP請求? –

+0

這一個看起來比下一個更復雜,你爲什麼會推薦它? –

+0

@mihail_ov嗯,因爲這些是你的PHP文件並且包含你的邏輯,所以你可以計算出它的大小(從內部請求開始;在內部模擬來自外部源的請求)。我建議不要使用AbraCadaver的解決方案,因爲它會一直下載文件!這具有嚴重的性能影響。我提供的鏈接中的答案僅執行僅返回一些元數據的「HEAD」請求。 – ComFreek