在PHP中高效地逐行读取大型文件?
我的应用程序读取一个5MB-10MB的大文件,该文件是用json条目逐行输入的 每一行都由一个解析器处理,该解析器被馈送到多个解析器并分别处理。读取文件后,将移动该文件。程序不断地输入要处理的文件 该程序当前使用的是在PHP中高效地逐行读取大型文件?,php,performance,Php,Performance,我的应用程序读取一个5MB-10MB的大文件,该文件是用json条目逐行输入的 每一行都由一个解析器处理,该解析器被馈送到多个解析器并分别处理。读取文件后,将移动该文件。程序不断地输入要处理的文件 该程序当前使用的是@file\u get\u contents($filename)。程序的结构按原样工作 问题是file\u get\u contents将整个文件作为数组加载,整个系统运行一分钟。我怀疑,如果我逐行阅读它,而不是等待文件加载到内存中,我可以提高速度(我可能是错的,并愿意接受建议)
@file\u get\u contents($filename)
。程序的结构按原样工作
问题是file\u get\u contents
将整个文件作为数组加载,整个系统运行一分钟。我怀疑,如果我逐行阅读它,而不是等待文件加载到内存中,我可以提高速度(我可能是错的,并愿意接受建议)
执行此操作的文件处理程序太多。实现我所需要的最有效的方法是什么?哪种文件读取方法最适合
我有fopen
,fread
,readfile
,file
,还有fscanf
,这些都是我头上的事。然而,当我为他们读这个人的时候——所有的代码都是读取通用文件,而没有明确指出什么最适合更大的文件
$file = fopen("file.json", "r");
if ($file)
{
while (($line = fgets($file)) !== false)
{
echo $line;
}
}
else
{
echo "Unable to open the file";
}
Fgets读取,直到达到EOL或EOF。如果需要,可以使用第二个参数添加它应该读取的内容
有关FGET的更多信息:y您不使用吗?使用它的原因?它比写那些文件函数快吗?好的,但是读大文件和单行是最有效的,是什么使它不同于fread或readfile…等等,当你需要读每一行而不把它们保存在内存中时,这是最好的方法。另一种方法是使用fread,但它是一样的,我从来没有注意到任何差异(我发现fgets也更容易写,但它是我的),也许其他人会发布fread版本,我现在不能道歉。