Импорт большого файла Excel с помощью приложения laravel - PullRequest
2 голосов
/ 01 октября 2019

Мне удалось построить проект, похожий на видео: «Импорт CSV в Laravel 5.5 + Соответствующие поля»

Используя импорт Excel вместо CSV, он отлично работает с небольшими файлами Excel(менее 1000 строк), но у меня есть файлы Excel с более чем 13000 строк, приложение продолжает выдавать следующую ошибку:

Maximum execution time of 30 seconds exceeded
Level
ERROR
Exception
{
    "class": "Symfony\\Component\\Debug\\Exception\\FatalErrorException",
    "message": "Maximum execution time of 30 seconds exceeded",
    "code": 1,
    .
    .
    .

Я пробовал по-разному и читаю документацию Laravel Excel> Раздел импорта> Чтение чанков и Чтение в очереди , но это также не сработало, поскольку я импортирую файл Excel в collection , затем сопоставляю поля и затем создаю новые модели и сохраняю их.

Пожалуйста, советы по любому совету помогут мне импортировать большие файлы Excel и сопоставить поля базы данных с заголовками столбцов файлов Excel.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Изменить свою конфигурацию PHP. Увеличьте время на ниже 4 способа .

  1. Увеличьте время выполнения на уровне php.ini,

    max_execution_time=300
    
  2. Используйте PHP во время выполнения, чтобы увеличить его,

    ini_set('max_execution_time',300);  //300 seconds = 5 minutes
    
  3. Используйте внутри .htaccess, чтобы увеличить его,

    php_value max_execution_time 300
    
  4. установить ограничение по временив методе __construct или вы также можете установить в контроллере индекса, где вы хотите иметь большой лимит времени.

    public function __construct() { set_time_limit(500000); }

0 голосов
/ 09 октября 2019

Иногда я получаю 504 Gateway Time-out, а иногда я получаю ошибку laravel:

Maximum execution time of 30 seconds exceeded или значение, которое я установил в max_execution_time, как предложено @Vaibhavi Sojitra

С этими ошибками, это может быть любой из следующих параметров PHP в php.ini, который вызывает внезапное завершение процесса PHP, в результате чего Nginx получает «сброс» от своего партнера (в данном случае, php-fpm backend).

Я не мог найти лучшую технику Laravel, чтобы решить эту проблему, решение, которое работало для меня (пока я не найду лучшее):

увеличить следующие параметры в php.ini

max_input_time = ...
max_execution_time = ...
default_socket_timeout = ...

После этого процесс импорта работал хорошо.

...