我有這個1000萬字的文件,每行一個字。我試圖打開該文件,讀取每一行,將其放入一個數組並計算每個單詞的出現次數。有沒有PHP函數可讀的最大行數
wartek
mei_atnz
sommerray
swaggyfeed
yo_bada
ronnieradke
… and so on (10M+ lines)
我可以打開該文件,讀取它的大小,甚至線echo
在瀏覽器上線(這是很長的,當然),但線解析它,當我試圖執行任何其他操作,腳本只是拒絕執行。沒有錯誤,沒有警告,沒有die(…)
,沒有。
訪問文件總是可以的,但是這些操作不會以相同的成功執行。我想這和它的工作...
while(!feof($pointer)) {
$row = fgets($pointer);
print_r($row);
}
...但這並不:
while(!feof($pointer)) {
$row = fgets($pointer);
array_push($dest, $row);
}
每次(不行的大文件,還好有小也試圖與SplFileObject
或file($source, FILE_IGNORE_NEW_LINES)
同樣的結果文件)
猜測問題不是大小(150 ko),但可能是長度(10M +行),我將該文件分割爲大約20k而沒有任何改進,然後再將其減少到大約8k行,它的工作。
我也去掉了時間限制與set_time_limit(0);
或刪除(幾乎)所有內存限制均在php.ini中和我的腳本ini_set('memory_limit', '8192M');
.Regarding的錯誤,我可以,我設置的error_reporting(E_ALL);
在頂部我腳本。
所以問題是:
- 是有可以通過PHP內置函數讀取行的最大數目?
- 爲什麼我可以
echo
或print_r
但不執行任何其他操作?
當解釋器嘗試分配比允許分配更多的內存時,腳本將被終止。會生成一條錯誤消息,但可能您的PHP解釋器和/或腳本本身已關閉['error_reporting'](http://php.net/manual/en/function.error-reporting.php)。這就是爲什麼你沒有收到任何錯誤信息。錯誤報告也可能沒有關閉,但它被配置爲不顯示錯誤,只將它們保存在'php_errors.log'中。 – axiac
沒有限制可以讀取的行或字節。唯一的限制是['memory_limit']的配置值(http://php.net/manual/en/ini.core.php#ini.sect.resource-limits)以及進程可用的計算機內存。請注意,PHP內部用來管理它所使用的變量的數據結構也佔用內存,並被計入「memory_limit」。 – axiac
錯誤報告被設置爲E_ALL(忘記提及它,我編輯了我的帖子)並在** php。ini **,參數'display_errors'設置爲'on'on' –