退出后,PHP脚本继续执行()

时间:2016-06-19 08:33:59

标签: php performance simplexml

所以我有一个相对简单的PHP脚本

  • 从远程休息服务中读取~70个XML文件;

  • 解析使用SimpleXMLElement类读取XML文件(许多新的SimpleXMLElement()调用);

  • 输出到文件json编码数组,其中包含关联数组,其中每个数组都有一些感兴趣的属性来自这些XML文件。

脚本的问题是它比将结果输出到文件要晚得多。我用Google搜索,但无法找到可能导致此类问题的任何内容。下面是简化的代码,它描述了我的脚本的功能。

function parseFiles()
{
    $fileData = array();
    $parsedData = array();

    // read files using curl, output is an array of SimpleXMLElements
    readXMLFiles($fileData);

    // for each XML object create an assoc array which contains attributes
    // of interest, add it to $parsedData
    parseData($fileData, $parsedData);

    file_put_contents("test.txt", json_encode($parsedData));

    /*
    This is where the problem occures, the scipt outputs result to the file
    MUCH faster than it ends execution for example file is created with data
    in ~ 15 seconds but the script ends in 60 seconds 
    (so the exit() command took 45 seconds????)
    */
    exit();
}

一旦达到exit(),这可能是由某种垃圾收集引起的吗?那些XML对象相对较大......而且我试图在wamp堆栈和PHP上运行脚本,在centos上运行apache,问题似乎在centos机器上出现。

1 个答案:

答案 0 :(得分:0)

问题是由SimpleXML class引起的。不知道发生了什么,但是我遇到了issue,有人发现它导致了内存泄漏,所以我重写了我的代码,以便与DOMDocument class一起解决问题。

在脚本挂起~2分钟之前,在重写之后它会在13秒内完成;)