Данные Excel Слишком большие для анализа.Время выполнения истекло - PullRequest
0 голосов
/ 25 апреля 2018

Я использую Laravel и использую https://csv.thephpleague.com/ для разбора CSV.

Моя функция похожа на

$path = $request->file('import_file')->getRealPath();
$csv = Reader::createFromPath($path, 'r');
$csv->setHeaderOffset(0); 
$csv_header = $csv->getHeader(); 
$sample_data = $csv->fetchOne(); 
$sample_data = array_values($sample_data);

$records = $reader->getRecords();
 $csv_file_id = Csv_data::create([
        'csv_filename' => $request->file('import_file')->getClientOriginalName(),
        'csv_header' => json_encode($csv_header),
        'csv_data' => json_encode($records)
    ]);

Как я могу анализировать большие наборы данных, имея дело с ограничением по времени выполнения.

Ну, я довольно новичок в этих вещах, поэтому я прошу просто не комментировать, как использовать то и это. До сих пор время просто проходит, пробуя тот и другой пакет. Таким образом, решение с фрагментами кода может быть лучше.

Также я пытался с,

$stmt = (new Statement())
->offset($offset)
->limit($limit)
;

Но безуспешно. ! Причина, даже ограничивающая смещение и работающая в цикле путем увеличения смещения, показывает ту же ошибку времени выполнения. 2-я причина, мне немного сложно закончить цикл с хорошей логикой.

Нужна помощь. Я буду доступен для мгновенного ответа.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

По умолчанию PHP обычно настроен на выполнение HTTP-запроса за 30 секунд до истечения времени ожидания - чтобы предотвратить бесконечный цикл обработки бесконечного цикла или бесконечного цикла.Похоже, это то, с чем вы столкнулись.

Быстрый и грязный метод - добавить ini_set('max_execution_time', 300); вверху вашего скрипта.Это скажет php работать в течение 300 секунд (5 минут) до истечения времени ожидания.

Вы можете отрегулировать это время по мере необходимости, но если оно регулярно занимает больше времени, возможно, вы захотите взглянуть на другие варианты - например, на создание команды консоли (https://laravel.com/docs/5.6/artisan) или ее запуск нарасписание.

0 голосов
/ 25 апреля 2018

Используете ли вы консольную команду для этого?https://laravel.com/docs/5.6/artisan

Если вы работаете с ограничениями памяти при работе через консоль, вы можете сначала попытаться увеличить предел памяти php.

Если этого все еще недостаточно, последний вариант - сократить.CSV на части.Но в этом нет необходимости, если только вы не имеете дело с очень вертым большим .csv (маловероятно).

...