【发布时间】:2012-08-01 18:15:23
【问题描述】:
我正在尝试解析一个 50 兆字节的 .csv 文件。该文件本身很好,但我试图解决所涉及的大量超时问题。每个都设置为上传明智,我可以轻松上传并重新打开文件,但在浏览器超时后,我收到 500 内部错误。
我的猜测是我可以将文件保存到服务器上,打开它并保留我处理的行的会话值。在某一行之后,我通过刷新重置连接并在我离开的那一行打开文件。这是一个可行的想法吗?之前的开发者做了一个效率非常低的 MySQL 类,它控制着整个站点,所以我不想写自己的类,如果我不需要,我也不想乱他的类。
TL;DR 版本: 保存我当前在具有 38K 行产品的 CSV 文件的最后一行然后在 X 行后重置连接是否有效从我离开的地方开始?还是有另一种方法来解析大型 CSV 文件而不会超时?
注意:这是 PHP 脚本的执行时间。目前在 38K 行,通过命令行运行大约需要 46 分 5 秒。当我从浏览器中删除它时,它 100% 正常工作,这表明它是浏览器超时。据 Google 告诉我,Chrome 的超时是不可编辑的,而 Firefox 的超时很少起作用。
【问题讨论】:
-
您应该详细说明什么是超时。您与 MySQL 的连接、PHP 脚本执行时间还是其他什么?您是否考虑过将超时设置更长的时间?
-
您应该首先考虑让脚本拆分文件。
-
@JYelton I 这是 PHP 脚本的执行时间。目前在 38K 行,通过命令行运行大约需要 46 分 5 秒。当我从浏览器中删除它时,它 100% 正常工作,这表明它是浏览器超时。据谷歌告诉我,Chrome 的超时是不可编辑的,而 Firefox 的超时很少起作用。
-
46 分钟完成
-
查看旧开发人员的代码,我注意到他们使用了大约 15 个 if...else 语句、7 个函数(每个函数至少有 10 个 if...else 语句),并且每个函数执行一些非常低效的 MySQL 查询。我完全同意该接口是为 KB 数据设计的,但不幸的是,我有一个时间紧迫的问题,即“快速或肮脏,我们不在乎。在你今天离开之前找到修复程序。”所以我想我会试一试我的想法,然后我会回复结果。感谢大家的想法。