如何在 php 中执行冗长的任务,而最大执行时间为 30 秒


How can I do lengthy tasks in php while the max execution time is 30 seconds?

我正在将数据从文本文件解析到 mysql 数据库。问题是,在解析一定数量的记录(从 250,000 到 380,000 之间)后,我得到Fatal error: Maximum execution time of 30 seconds exceeded.我可以通过将文件拆分为较小的文件来解决此问题,但这很痛苦,我想找到一种方法来欺骗 PHP 处理整个文件。

有没有办法说服 PHP 运行冗长的进程,即使我无法访问 php.ini并且无法更改我的最长执行时间?

顺便说一句,这是我的解析脚本。也许我的php代码做错了什么。

您可能会

发现可以通过一次插入几行来提高性能。请尝试以下语法:

INSERT INTO
    tbl_name (a,b,c)
    VALUES(1,2,3),(4,5,6),(7,8,9)
;

应组合在一起的行数最好通过试验找到。可能是您在一个语句中添加的越多,它的速度就越快,但同样,如果您没有打开自动提交,这可能会很慢。

正如有人在评论中提到的那样,一次放入太多可能会使 CPU 最大化,并引起服务器管理员的注意。如果您需要在主机上小心处理此问题,请一次尝试 200 个,然后在迭代之间稍作usleep

也值得查看与数据库的连接 - 这是在同一台服务器上,还是在另一台服务器上?连接速度可能很慢。添加一些时间,例如,插入 5,000 行需要多长时间,然后尝试一下如何减少它。

这是INSERT的手动参考;请注意,这是非标准SQL,它不适用于其他数据库引擎。