【问题标题】:Importing large excel file using laravel application使用 laravel 应用程序导入大型 excel 文件
【发布时间】:2020-01-30 12:58:24
【问题描述】:

我设法构建了一个类似于视频的项目:"Import CSV in Laravel 5.5 + Matching Fields"

使用 excel 导入而不是 CSV,它适用于小型 excel 文件(少于 1000 行),但我有超过 13000 行的 excel 文件,应用程序不断发出以下错误:

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 文档 > 导入部分 > Chunk ReadingQueued reading 但这也不起作用,因为我将 excel 文件导入到 collection 然后匹配字段,然后创建新模型和保存它们。

请,任何提示的建议都可以帮助我导入大型 excel 文件并将数据库字段与 excel 文件列标题匹配。

【问题讨论】:

  • 我相信有更好的方法可以将数千个模型保存到数据库而不需要增加执行时间,或者不同的解决方案请咨询

标签: php excel laravel laravel-excel


【解决方案1】:

更改您的 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); }

【讨论】:

  • 我之前读到过这个,但我想要一个更好的 laravel 方法,而不需要做服务器修改。
  • @YaBasha 你可以在你的控制器_construct 函数中添加这个ini_set('max_execution_time', 300)
【解决方案2】:

有时我会收到504 Gateway Time-out,有时我会收到 laravel 错误:

Maximum execution time of 30 seconds exceeded 或我在@Vaibhavi Sojitra 建议的max_execution_time 中设置的值

由于这些错误,可能是php.ini 中的以下任何 PHP 参数导致 PHP 进程突然结束,从而导致 Nginx 从其对等方获取“重置”(在这种情况下,@ 987654325@后端)。

我找不到更好的 laravel 技术来解决这个问题,这个解决方案对我有用(直到我找到更好的解决方案):

php.ini中增加以下参数

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

之后导入过程运行良好。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多