在PHP中,我使用fopen()
,fgets()
和fclose()
来逐行读取文件。它运作良好。但是我有一个脚本(从CLI运行)必须处理三百个5GB文本文件。这大约是30亿fgets()
。所以它工作得很好,但在这个规模下,微小的速度节省将会非常快速地加起来。所以我想知道是否有任何技巧来加速这个过程?更快的方式来逐行读取文件?
我想到的唯一可能的事情是让fgets()
一次读取多行。它看起来并不像它支持的那样,但我在理论上可以让连续说出20个$line[] = fgets($file);
然后处理该数组。这与在一个命令中读取多行不完全相同,因此可能没有任何影响。但是我知道排队你的mysql插入并将它们作为一个巨大的插入(我将在经过更多测试和基准测试后在此脚本中实现的另一个技巧)将会节省大量时间。
你可以尝试读取它“缓冲区缓冲区”,并再次分开线路 – modsfabio
你尝试使用fgetcsv函数吗? –
对于php脚本的mmap或createfilemapping会有帮助https://github.com/calcinai/php-mmap – tommybee