我想知道是否有人知道如何在 PHP 中完成此操作。我正在运行一个脚本,该脚本涉及打开一个文件,获取前 1000 行,对这些行执行一些操作,然后 php 文件打开自身的另一个实例以获取接下来的 1000 行,依此类推,直到到达文件末尾.我正在使用 splfileobject 以便我可以查找某一行,这使我可以很好地将其分解为 1000 行 block 。我遇到的最大问题是性能。我正在处理超过 10,000,000 行的文件,虽然它处理前 10,000 行左右的速度相当快,但在那之后会出现巨大的指数减速,我认为只需要寻找到那一点。
我想做的是读取前一千行,然后将它们从文件中删除,以便我的脚本始终读取前一千行。有没有办法在不将文件的其余部分读入内存的情况下执行此操作。我见过的其他解决方案包括将每一行读入一个数组,然后删除前 X 个条目,但是一千万行会占用太多内存和时间。
如果有人有解决方案或其他可以加快性能的建议,我们将不胜感激。
最佳答案
不幸的是,这个问题没有真正的解决方案,因为文件总是在读取之前完全加载到主内存中。
我仍然发布了这个答案,因为这是一个可能的解决方案,但我怀疑它很难提高性能。如果我错了,请纠正我。
您可以使用 XML 将文件分成 1000 行为单位。并使用 PHP 的 DomDocument 类来检索和附加数据。您可以在要添加数据时追加子节点,并检索第一个子节点以获取前一千行,并根据需要删除节点。就像这样:
<document>
<part>
. . .
Thousand lines here
. . .
</part>
<part>
. . .
Thousand lines here
. . .
</part>
<part>
. . .
Thousand lines here
. . .
</part>
.
.
.
</document>
另一种方式:
如果您真的确定要将这些部分精确地分成 1000 行,为什么不将其保存在数据库中,每 1000 行在不同的行中?通过这样做,您肯定会减少文件读/写开销并提高性能。
关于php - 从文件 PHP 中删除前 X 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877447/