2016-08-29 37 views
0

我有一個ICS文件,該文件是2GB的,我想從該文件中解析IC的數據,但PHP是無法讀取這麼大的文件,我得到的致命錯誤「出內存「甚至我已經設置」ini_set('memory_limit','-1')「。 所以我想以某種方式打破或大ICS文件拆分爲小文件或有任何方式來從這樣大的ICS文件中讀取數據。PHP的突破或分裂一個大的ICS文件

我有一些小文件和所有工作正常,我可以提取其他文件,但2GB的大ICS文件更重要,我提取/解析數據。

在此先感謝

+0

所以不要一次讀完。一行一行解析,直到達到「記錄結束」。那麼你知道你已經有了一個完整的記錄閱讀,並且可以處理它。 –

+0

你的想法聽起來不錯。你能舉一些例子來逐行閱讀這個大的ICS文件嗎? –

+0

'$ fh = fopen(...); while($ line = fgets($ fh)){... do stuff ...} –

回答

0

處理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 
} 
?> 

希望這可以幫助你。

+0

是閱讀一個大文件的成本更多ram系統。所以最後我打破了2bg ICS文件到每個1000線的小文件,現在我有大約3000個大文件的分割文件。反正謝謝你的幫助:) –