在PHP中从大文本文件中读取并删除X行

有很多不同的场景是相似的(替换文件中的文本,读取特定的行等)但我没有找到一个很好的解决方案,我想做的事情:

消息(字符串)通常发送到队列 . 如果处理队列的服务器已关闭,则消息将保存到文件中 . 每行一条消息 . 当服务器再次启动时,我想开始将消息发送到服务器 . 带有消息的文件可能是“大”的,所以我不想将整个文件读入内存 . 我也只想发送一次消息,所以文件需要反映一条消息是否已被发送(换句话说:不要获得100行,然后在95之后PHP超时,以便下次同样的事情再次发生) .

What I basically need is to read one line from a big text file and then delete that line when it has been processed by my script, without constantly reading/writing the whole file.

我已经看到了不同的解决方案(fread,SplFileObject等),它们可以从文件中读取一行而无需读取整个文件(进入内存)但我还没有看到一种很好的方法来删除刚刚读取的行而不通过整个文件并再次保存 . 我猜它可以完成,因为需要做的事情是从文件的开头或结尾删除x字节,这取决于你从哪里读取行 .

要明确:我认为从文件读取第一行,使用它,然后读取所有其他行只是为了将它们写入tmp文件然后从那里写入原始文件是一个很好的解决方案 . 读取/写入100000行只是为了获得一行 .

问题可以通过其他方式解决,比如创建一些较小的文件,这样可以在不产生太多性能问题的情况下读取/写入,但我想知道是否有人能够解决确切的问题 .

Update: 由于无法完成,我最终使用的是Sqlite .

回答(0)