2008-10-05 56 views
11

我正在寫一個PHP腳本,我叫什麼是一個數組在PHP

$lines = file('base_list.txt'); 

打破文件成一個數組鍵的最大數量。該文件有超過100,000行,其中應該是陣列100,000個元素,但是當我運行時

print_r($lines); 
exit; 

該數組僅包含7280個元素。

所以我很好奇,WTF?數組的密鑰數量是否有限制?我使用2GB內存的雙核2.0Ghz在本地運行(儘管IIS爲);所以我有點困惑如何一個4MB的文件可以拋出這樣的結果。

編輯: 我可能應該提到我以前在php.ini中將memory_limit設置爲512MB。

+0

如果用count檢查數組中元素的數量,它是否也只報告7280? – Cory 2008-10-05 01:28:54

+0

*(相關)* [HashTables](http://schlueters.de/blog/archives/142-HashTables.html) – Gordon 2010-08-23 08:44:53

回答

2

我相信這是基於php.ini文件中設置的可用內存量。

+0

如果一個文件超過了內存限制,你不期望發生異常嗎? – 2008-10-05 01:15:10

5

編輯:正如羅布所說,如果你的應用程序內存不足,很可能是它不會去print_r線。這也是我的預感,但如果它內存問題,以下可能會有所幫助。

看看這行的php.ini文件,也許增加到16或更多。

memory_limit = 8M 

如果您沒有訪問爲php.ini(例如,如果這是發生在共享服務器上),你可以用.htaccess文件中像這樣

php_value memory_limit 16M 

顯然有些主機修復不要讓你這樣做。

1

我會同意科裏。我認爲你的PHP可能配置了8MB的默認內存,其中4MB×2已經更多。 x2的原因是因爲您必須加載文件,然後創建數組,您需要將文件重新存儲在內存中。我只是猜測,但這是有道理的。

你確定PHP沒有記錄錯誤嗎?

3

是否有可能對print_r的輸出有固有的限制。我建議尋找文件中的第一行和最後一行,以查看它們是否在數組中。如果你碰到了插入數組的內存限制,你永遠不會得到print_r行。

3

兩個建議:

  1. 計數數組中的項的實際數量和查看數組是否是條目(因此消除了或識別print_r()的罪魁禍首)

  2. 的正確數量

    驗證輸入...文件中的行結束導致問題的任何可能性?例如,是否有不同類型的行結尾的混合?請參閱manual page for file()以及關於auto_detect_line_endings設置的註釋,儘管這不太可能與mac行結尾有關。

2

每當我的PHP內存耗盡時,我收到一條錯誤消息,指出這一事實。所以,我也想說,如果你正在運行內存則腳本不會得到該print_r()

嘗試在php.ini或使用
ini_set('auto_detect_line_endings', 1)使auto_detect_line_endings。可能有一些行結尾窗口不明白&這個ini選項可以幫助。關於這個INI選項的更多信息,可以發現here

2

您應該使用count來數出數組,不print_r項目的數量。如果由於超時或其他原因而導致此大型數組的輸出中止,該怎麼辦?或者print_r中的一些錯誤/功能?

6

Darryl Hein,

是的,錯誤日誌中沒有任何東西。我甚至增加了錯誤報告,但仍然與print_r()無關。

迴應周杰倫: 我跑

echo count($lines); 

,我得到的105546的結果,但仍的print_r()只顯示7280

以羅布·沃克的建議,我掛繞在所有元素該數組實際上包含了所有的結果。這導致我相信問題與print_r()本身有關,而不是數組大小的限制。

另一個奇怪的是我在我的REHL服務器上試過它,結果是它應該是。現在我不想在Windows/IIS上責怪這個,但是你去了。

考慮到上述問題,我認爲這個問題應該重新命名,因爲它不再與數組相關但是print_r。

1

如果您要輸出到Internet Explorer之類的東西,您可能需要確保它可以顯示您嘗試放置的所有信息。我知道有一個HTML頁面的限制,但我不知道它是什麼。

2

PHP的print_r函數確實有侷限性。但是,即使您沒有「看到」整個數組的打印,它仍然在那裏。打印大型數據對象時,我也遇到了同樣的問題。

它使調試變得困難,如果你必須看到整個數組,你可以創建一個循環來打印每一行。

foreach ($FileLines as $Line) echo $Line; 

這應該讓你看到所有的行沒有限制。

相關問題