我有一个脚本,每次被调用时,都会获取文件的第一行。已知每行的长度完全相同(32个字母数字字符),并以“\ r \ n”结尾。 获取第一行后,脚本将其删除。这是获取和删除文件中第一行的最有效方法吗?
这是这样完成的:
$contents = file_get_contents($file));
$first_line = substr($contents, 0, 32);
file_put_contents($file, substr($contents, 32 + 2)); //+2 because we remove also the \r\n
显然它的工作原理,但我不知道是否有更聪明(或更有效)的方式来做到这一点?
在我简单的解决方案中,我基本上是读取并重写整个文件,只是取出并删除第一行。
你可以让这个更高效的内存(做一个循环,一次读取一行,给他们写了一个在时间除了第一个),但它看起来很复杂,并且容易出错。我会和你一样。没有解决从第一个字节开始按顺序存储文件这一事实。 – 2010-03-08 21:25:14
如果你可以将文件存储为索引,并通过索引执行所有的R/W,也许这个操作会更快,因为你可以简单地从索引中删除该行,这样做比在完整的文件。 但是,如果文件很小,那么I/O的成本将低于维护索引的开销。 – anijhaw 2010-03-08 21:26:21
对于我能想到的类似问题,唯一的高度优化解决方案将涉及文件系统驱动程序中的IOCTL,该文件系统驱动程序会从文件中剪切第一个逻辑块(取决于硬件和实现的大小),而不会触及其余部分。但这是解决不存在问题的学术练习,绝对不是你想要的。 :) – 2010-03-08 21:28:33