首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向mysql数据库大容量导入数据导致504网关超时。(PHP和CI)

向mysql数据库大容量导入数据导致504网关超时。(PHP和CI)
EN

Stack Overflow用户
提问于 2020-09-25 15:39:50
回答 2查看 567关注 0票数 0

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

代码语言:javascript
复制
ini_set('max_execution_time', 1800);
ini_set('default_socket_timeout', 1800);

但是,在任何帮助的帮助下,都不起作用。PHP版本是7.3

EN

回答 2

Stack Overflow用户

发布于 2020-09-26 05:53:24

所有的well服务器通常都有一个单独的超时,以及php,如Apache和IIS,默认情况下大约6-7分钟。您需要检查您的主机正在运行哪个软件,并检查其文档。虽然通常您不能更改这些设置,但只能更改服务器所有者(我猜您是在租用服务器/空间)。但首先,在你设置它们之后,值得尝试echo ini_get('max_execution_time');,看看它是否改变了什么,或者已经被服务器覆盖了(在共享主机上,可能有一个‘硬上限’,你不能再增加了)。

票数 0
EN

Stack Overflow用户

发布于 2020-09-26 15:41:19

您应该尝试使用MYSQL事务来插入csv记录。在insert操作开始之前启动事务,在所有进程结束后提交事务。这里有一个小例子,它会对你有所帮助。

代码语言:javascript
复制
$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");

谢谢你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64059869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档