Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中高效地逐行读取大型文件?_Php_Performance - Fatal编程技术网

在PHP中高效地逐行读取大型文件?

在PHP中高效地逐行读取大型文件?,php,performance,Php,Performance,我的应用程序读取一个5MB-10MB的大文件,该文件是用json条目逐行输入的 每一行都由一个解析器处理,该解析器被馈送到多个解析器并分别处理。读取文件后,将移动该文件。程序不断地输入要处理的文件 该程序当前使用的是@file\u get\u contents($filename)。程序的结构按原样工作 问题是file\u get\u contents将整个文件作为数组加载,整个系统运行一分钟。我怀疑,如果我逐行阅读它,而不是等待文件加载到内存中,我可以提高速度(我可能是错的,并愿意接受建议)

我的应用程序读取一个5MB-10MB的大文件,该文件是用json条目逐行输入的

每一行都由一个解析器处理,该解析器被馈送到多个解析器并分别处理。读取文件后,将移动该文件。程序不断地输入要处理的文件

该程序当前使用的是
@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版本,我现在不能道歉。