我正在开发一个PHP/MMySQL应用程序,该应用程序需要处理CSV文件,但脚本总是在整个过程完成之前停止。
如何优化系统以最终处理此问题?
注意,我不会为这个系统做网络托管,所以我不能延长PHP的最长执行时间。
感谢
几个想法。
-
将文件分解为一个行集,您知道您可以在一次拍摄中处理该行集。启动多个进程。
-
把这项工作分解,以便分几道处理。
查看加载数据信息。这是一个纯MySQL解决方案。
您可以使用PHP脚本开始/执行此SQL,该脚本可以在脚本停止/超时后继续运行。或者,更好的是,安排一个cron工作。
您不需要控制配置文件来延长最长执行时间。您仍然可以在代码中使用set_time_limit(0)使其运行到最后。唯一的问题是,如果你是从浏览器调用这个。浏览器可能会超时并使页面处于孤立状态。我有一个网站,它生成需要很长时间的CSV文件,我使用缓冲区刷新结束与浏览器的会话,并在作业完成时发送电子邮件通知,从而将进程置于后台运行。
建议一:插入其中一行后,将其从csv文件中删除
建议二:用最后插入的csv行更新文件或mysql,下次运行时跳过该行之前的所有其他条目。
此外,您可以添加每次执行30秒或每次执行100/1000/X行的限制(在脚本终止之前效果最好)。这对两个建议都有效。