我有一个1.3GB的文本文件,需要在PHP中提取一些信息。我已经研究过了,有几种不同的方法可以做到我所需要的,但总是需要一些澄清,哪种方法最好,或者是否存在其他更好的方法,我不知道呢?
文本文件中我需要的信息仅为每行的前40个字符,文件中大约有1700万行。每行的前40个字符将被插入到数据库中。
我拥有的方法如下;
上面的方法是逐行读取并获取数据,我已经将所有的数据库插入命令排序,每次以事务方式执行50个插入命令,总共执行10次。
下一个方法基本相同,但使用
另一种方法是仅提取文件的一部分,重新编写未使用的数据,并在执行该部分后调用
在获取最快和最有效的结果方面,哪种方法是最好的?还是有更好的方法来处理这个问题,我没有想到?
此外,我计划在wamp中使用此脚本,但在浏览器中测试运行时已经出现了超时的问题,即使将脚本超时时间设置为0。有没有办法让脚本在不通过浏览器访问页面的情况下运行?
文本文件中我需要的信息仅为每行的前40个字符,文件中大约有1700万行。每行的前40个字符将被插入到数据库中。
我拥有的方法如下;
// REMOVE TIME LIMIT
set_time_limit(0);
// REMOVE MEMORY LIMIT
ini_set('memory_limit', '-1');
// OPEN FILE
$handle = @fopen('C:\Users\Carl\Downloads\test.txt', 'r');
if($handle) {
while(($buffer = fgets($handle)) !== false) {
$insert[] = substr($buffer, 0, 40);
}
if(!feof($handle)) {
// END OF FILE
}
fclose($handle);
}
上面的方法是逐行读取并获取数据,我已经将所有的数据库插入命令排序,每次以事务方式执行50个插入命令,总共执行10次。
下一个方法基本相同,但使用
file()
将所有行存储到数组中,然后使用foreach
获取数据?不过我对这种方法并不确定,因为该数组实际上会有超过1700万个值。另一种方法是仅提取文件的一部分,重新编写未使用的数据,并在执行该部分后调用
header
来重新启动脚本?在获取最快和最有效的结果方面,哪种方法是最好的?还是有更好的方法来处理这个问题,我没有想到?
此外,我计划在wamp中使用此脚本,但在浏览器中测试运行时已经出现了超时的问题,即使将脚本超时时间设置为0。有没有办法让脚本在不通过浏览器访问页面的情况下运行?
php path/to/script.php
将执行该脚本。 - sarnoldfgetl
读取每一行,进行所需操作,并像这样循环。您不会在任何时候存储超过一行的内存。那么文件有多大也无关紧要。 - Ansari