2016-07-30 31 views
0

我正在使用AdWords報告api來獲取所有adwords帳戶的所有廣告和關鍵字信息。目前帳戶數爲1363.報告api生成一個CSV,我將它解析爲數組,下面是該函數。解析一個好的1180帳戶後,它給出了一個錯誤解析導致php內存不足的CSV

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 262144 bytes) .

我已經將內存設置爲512MB(我相信是很多)。

的錯誤出現在這條線

$line_of_text[] = fgetcsv($file_handle, 1024); 

私有函數convertCSVtoArray($ csvFile){

try { 
     $file_handle = fopen($csvFile, 'r'); 
     while (!feof($file_handle)) { 
      $line_of_text[] = fgetcsv($file_handle, 1024); 
     } 
     fclose($file_handle); 
     return $line_of_text; 
    } catch (Exception $e) { 
     log_message('Exception in convertCSVtoArray()', $e); 
     throw new Exception('Exception in convertCSVtoArray => '.$e); 
    } 
} 

上述功能是從方法

$data = $this->convertCSVtoArray($filePath); 

我相信所謂,在給定的代碼中某個地方存在內存泄漏,它正在佔用所有的內存。

請建議是否有解決方案。

+0

那的確是相當有趣的。這是你正在閱讀的唯一文件嗎?基於記錄數(1360)和指定的fgetcsv長度(1024):在我的測試中僅消耗約2-4MB。在運行'convertCSVtoArray'之前,您是否使用了'memory_get_usage'來確保在調用之前內存使用率不是很高? (作爲一個可能無關的方面:你應該添加一個檢查來確保你在進入該循環之前已經獲得了一個讀取句柄,如果'fopen'返回false,你會得到一個無限循環,直到你達到內存限制因爲'feof'永遠不會返回true) – EPB

回答

0

爲了在腳本的頂部改變一個特定腳本存儲器限制,包括線,例如這樣的:

的ini_set(「memory_limit的」,「12M」);

您也可以使這對諸如此服務器的php.ini文件中加入一行在服務器上運行的所有PHP腳本的永久性改變:

memory_limit的= 12M

+0

它已經設置爲512M :) –