PHP脚本逐渐变慢(文件阅读器)

DCD*_*DCD 5 php fopen fgets slowdown

我有一个脚本,当针对计时器时,逐渐变慢.这很简单,因为它只是读取一行,检查然后将其添加到数据库,然后进入下一行.

这是它的输出逐渐恶化:

Record: #1,001 Memory: 1,355,360kb taking 1.84s
Record: #1,001 Memory: 1,355,360kb taking 1.84s
Record: #2,002 Memory: 1,355,192kb taking 2.12s
Record: #3,003 Memory: 1,355,192kb taking 2.39s
Record: #4,004 Memory: 1,355,192kb taking 2.65s
Record: #5,005 Memory: 1,355,200kb taking 2.94s
Record: #6,006 Memory: 1,355,376kb taking 3.28s
Record: #7,007 Memory: 1,355,176kb taking 3.56s
Record: #8,008 Memory: 1,355,408kb taking 3.81s
Record: #9,009 Memory: 1,355,464kb taking 4.07s
Record: #10,010 Memory: 1,355,392kb taking 4.32s
Record: #11,011 Memory: 1,355,352kb taking 4.63s
Record: #12,012 Memory: 1,355,376kb taking 4.90s
Record: #13,013 Memory: 1,355,200kb taking 5.14s
Record: #14,014 Memory: 1,355,184kb taking 5.43s
Record: #15,015 Memory: 1,355,344kb taking 5.72s
Run Code Online (Sandbox Code Playgroud)

不幸的是,该文件约为20gb,所以当整个事物以增加的速度读取时,我可能已经死了.代码(主要)在下面,但我怀疑它与fgets()有关,但我不确定是什么.

    $handle = fopen ($import_file, 'r');

    while ($line = fgets ($handle))
    {
        $data = json_decode ($line);

        save_record ($data, $line);
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

编辑:

评论'save_record($ data,$ line);' 似乎什么都不做.

Joh*_*ret 0

http://php.net/manual/en/function.fgets.php

根据 Leigh Purdie 的评论,使用fgets. 如果你的 JSON 对象比他的测试线大,你可能会更快地达到限制

使用http://php.net/manual/en/function.stream-get-line.php并指定长度限制