我的任务是将一个大的.txt文件(大约15,000行)解析成MySQL数据库。问题是我正在使用30秒的最大执行时间。我试过用这个:
$handle = @fopen('http://www.someothersiteyouknow.com/bigfile.txt', "r");
if ($handle) {
while (!feof($handle)) {
$lines[] = fgets($handle, 4096);
}
fclose($handle);
}
然后我可以访问$ lines数组并以我需要的方式解析数据,但脚本完成运行需要很长时间。我的感觉是我应该以块的形式读取文件,一次可能是1000行。但我只懂了如何从.txt文件的开头读取。请你正确地提出一些方法来做正确的方法吗?只是为了澄清,我不需要特定的代码示例,只需要了解如何使用PHP解析大型.txt文件。
答案 0 :(得分:2)
说实话,这似乎不是最好的主意。如果多个用户同时或同时访问同一页面会怎样?您将同时处理(用户数*大文本文件)。
建议您将文件置于本地(如果文件尚不存在,则将其保存在本地),并使用本地文件。这应该有助于缩短您的交易时间
这应该有助于你达到30s限制......如果文件下载时间不超过30秒!
答案 1 :(得分:2)
考虑在你的循环中添加set_time_limit。
此外,如果这是一次性的事情你可以看看用mySQL的load data file吗?
答案 2 :(得分:2)
如果您可以将文件放在服务器上,那么您可以尝试使用LOAD DATA INFILE
查询。它有很多选项来解析输入,并且工作速度相当快。开始尝试文件的一小部分。如果服务器最终将所有内容插入单行,则通过指定LINES TERMINATED BY
或'\n'
来调整'\r\n'
部分。然后根据文件中的行数仔细检查行数,并SELECT
其中一些行以查看表中最终的行。