2016-07-30 2 views
0

Я использую adwords report api, чтобы получить информацию обо всех объявлениях и ключевых словах для всей учетной записи adwords. В настоящее время количество учетных записей - 1363. Отчеты api генерируют CSV, который я анализирую с помощью массива ниже, это функция. После разбора хорошего счета 1180 он дает ошибкуРазбор CSV, вызывающий нехватку памяти в php

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

Я поставил память 512 МБ (который я считаю, это очень много).

ошибка приходит на этой линии

$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-4 МБ в моих тестах. Использовали ли вы 'memory_get_usage' перед запуском' convertCSVtoArray', чтобы убедиться, что использование памяти еще не было выше перед вызовом? (Скорее всего, это не связано с чем-то: вы должны добавить чек, чтобы убедиться, что вы действительно получили дескриптор чтения, прежде чем вводить этот цикл. Если 'fopen' возвращает false, вы получите бесконечный цикл, который будет продолжаться до тех пор, пока вы не достигнете предела памяти поскольку 'feof' никогда не вернет true.) – EPB

ответ

0

Для того, чтобы изменить ограничение памяти для одного конкретного сценария, включает в себя линию, такие как это в верхней части сценария:

ini_set («memory_limit», «12M»);

Вы также можете сделать это постоянное изменение для всех PHP скриптов, работающих на сервере, добавив строку, например, как это php.ini файл сервера:

memory_limit = 12M

+0

Он уже установлен в 512M :) –

Смежные вопросы