所以我有一个相对简单的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机器上出现。
答案 0 :(得分:0)
问题是由SimpleXML class引起的。不知道发生了什么,但是我遇到了issue,有人发现它导致了内存泄漏,所以我重写了我的代码,以便与DOMDocument class一起解决问题。
在脚本挂起~2分钟之前,在重写之后它会在13秒内完成;)