【问题标题】:Bulk import data to mysql database causing 504 gateway timeout. (PHP & CI)将数据批量导入 mysql 数据库导致 504 网关超时。 (PHP 和 CI)
【发布时间】:2020-09-25 07:39:50
【问题描述】:

我正在制作一个脚本,将 csv 数据批量导入 mysql 数据库表。我正在遍历数据并检查数据库中是否已经存在该值。如果没有,则将其插入表中。 但是脚本给出了 504 网关超时错误。我尝试增加 max_execution_time 但没有任何效果,脚本超时发生在大约 7-9 分钟内。 我尝试增加 cPanel 中的超时时间并使用以下代码

ini_set('max_execution_time', 1800);
ini_set('default_socket_timeout', 1800);

但没有任何工作,在此之前感谢任何帮助。 PHP版本是7.3

【问题讨论】:

  • PHP 超时通常不会产生 504 错误。网关超时意味着您和服务器之间的某些事情已经厌倦了等待。它可能是负载均衡器或某些自动进程,在一定时间后会杀死其他进程。 PHP 超时会产生 500 或 502 错误

标签: php mysql codeigniter


【解决方案1】:

默认情况下,所有网络服务器通常有一个单独的超时时间,而不是像 Apache 和 IIS 这样的 php 大约 6-7 分钟。您需要检查您的主机正在运行哪些软件并检查其文档。尽管通常您不能仅更改服务器所有者的这些设置(我猜您正在租用服务器/空间)。但首先值得一试echo ini_get('max_execution_time');,在您设置它们以查看它是否更改了任何内容或已被服务器覆盖(在共享主机上可能有一个“硬上限”,您无法进一步增加。

【讨论】:

    【解决方案2】:

    您应该尝试使用 MYSQL TRANSACTION 来插入 csv 记录。在插入操作开始之前启动 TRANSACTION 并在所有进程结束后 COMMIT TRANSACTION。这是一个可以帮助你的小例子。

    $file_name = 'https://yoursite.com/upload_csv_folder/' . $csv_file_name;
    
    $fileSize = file($file_name);
    $totalRow = count($fileSize);
    
    $handle = fopen($file_name, "r");
    $header = fgetcsv($handle, 1000, ",");
    
    mysql_query("START TRANSACTION");
    while (($csv_data = fgetcsv($handle, 1000, ",")) !== false) {
        // Do your duplicate checking operation
        // Insert record
    }
    mysql_query("COMMIT");
    

    谢谢。

    【讨论】:

    • 谢谢你的例子,我会试试这个。
    猜你喜欢
    • 2014-10-14
    • 2011-03-07
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2012-09-12
    • 2020-09-12
    相关资源
    最近更新 更多