我有一個ICS文件,該文件是2GB的,我想從該文件中解析IC的數據,但PHP是無法讀取這麼大的文件,我得到的致命錯誤「出內存「甚至我已經設置」ini_set('memory_limit','-1')「。 所以我想以某種方式打破或大ICS文件拆分爲小文件或有任何方式來從這樣大的ICS文件中讀取數據。PHP的突破或分裂一個大的ICS文件
我有一些小文件和所有工作正常,我可以提取其他文件,但2GB的大ICS文件更重要,我提取/解析數據。
在此先感謝
我有一個ICS文件,該文件是2GB的,我想從該文件中解析IC的數據,但PHP是無法讀取這麼大的文件,我得到的致命錯誤「出內存「甚至我已經設置」ini_set('memory_limit','-1')「。 所以我想以某種方式打破或大ICS文件拆分爲小文件或有任何方式來從這樣大的ICS文件中讀取數據。PHP的突破或分裂一個大的ICS文件
我有一些小文件和所有工作正常,我可以提取其他文件,但2GB的大ICS文件更重要,我提取/解析數據。
在此先感謝
處理Out of memory
例外,通常的方法是通過分配更多的內存在php.ini
文件到PHP,但因爲你擁有2GB的文件,除非你有很多的存儲系統上,那不是一個有效的選項。基本上你正試圖讀取錯誤的文件。而不是讀取整個文件並將其保存到一個變量,這會花費與文件大小相等的內存,您可以根據您正在處理的文件的格式,按行或字節對它們進行解析。這裏有一個基本的例子,你可以工作
<?php
$handle = fopen("fileName", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
// process line here
}
fclose($handle);
} else {
// handle file read error
}
?>
希望這可以幫助你。
是閱讀一個大文件的成本更多ram系統。所以最後我打破了2bg ICS文件到每個1000線的小文件,現在我有大約3000個大文件的分割文件。反正謝謝你的幫助:) –
所以不要一次讀完。一行一行解析,直到達到「記錄結束」。那麼你知道你已經有了一個完整的記錄閱讀,並且可以處理它。 –
你的想法聽起來不錯。你能舉一些例子來逐行閱讀這個大的ICS文件嗎? –
'$ fh = fopen(...); while($ line = fgets($ fh)){... do stuff ...} –