gpt4 book ai didi

php - 使用 PHP 从 1.3GB 文本文件中提取文本的最佳方法?

转载 作者:可可西里 更新时间:2023-11-01 13:50:55 24 4
gpt4 key购买 nike

我有一个 1.3GB 的文本文件,我需要从 PHP 中提取一些信息。我已经对其进行了研究,并提出了几种不同的方法来完成我需要做的事情,但一如既往地在澄清哪种方法最好或者是否存在我不知道的另一种更好的方法之后?

我在文本文件中需要的信息只是每行的前 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 次插入十次。

下一个方法实际上与上面相同,但是在执行 foreach 获取数据之前调用 file() 将所有行存储在数组中?我不确定这种方法,因为数组基本上有超过 1700 万个值。

另一种方法是只提取文件的一部分,用未使用的数据重写文件,并在该部分执行后使用 header 调用调用脚本?

要以最快最有效的方式完成这项工作,最好的方法是什么?或者有没有我想到的更好的方法来解决这个问题?

我还计划将这个脚本与 wamp 一起使用,但是在测试时在浏览器中运行它会导致超时问题,即使将脚本超时设置为 0 也是如此。有没有一种方法可以在不访问页面的情况下执行脚本运行通过浏览器?

最佳答案

到目前为止,您一切顺利,不要使用“file()”函数,因为它很可能会达到 RAM 使用限制并终止您的脚本。

我什至不会将东西累积到“insert[]”数组中,因为那样也会浪费 RAM。如果可以,请立即插入数据库。

顺便说一句,有一个名为“cut”的好工具可以用来处理文件。

cut -c1-40 file.txt

您甚至可以将 cut 的标准输出重定向到一些插入数据库的 PHP 脚本。

cut -c1-40 file.txt | php -f inserter.php

inserter.php 然后可以从 php://stdin 读取行并插入到数据库中。

“cut”是所有 Linux 上可用的标准工具,如果您使用 Windows,您可以通过 MinGW shell 获取它,或者作为 msystools 的一部分(如果您使用 git)或使用 gnuWin32 安装 native win32 应用程序.

关于php - 使用 PHP 从 1.3GB 文本文件中提取文本的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com