在PHP中的Foreach循环中使用Xpath的内存峰值

时间:2016-03-16 16:34:46

标签: php xpath memory-leaks domxpath

我一直在使用Xpath对象,最近发现它是我内存峰值的根本原因。我定义了我的xpath对象

$dom = new DOMDocument();
@$dom ->loadHTML($cl);
$xpath = new DOMXpath($dom);

以下是导致内存不断增加的一些代码:

$websiteQuery = $xpath->query("//a[@compid='Profile_Website']/@href");
foreach($websiteQuery as $web){
    $website = $websiteQuery ->item(0)->nodeValue;
}

这会导致永不停止的内存增加,直到脚本完成(有时超过6小时)。在这种情况下,$ websiteQuery->长度只有1,所以它只通过循环一次,但somehoe在循环中调用$ websiteQuery-> item(0)会导致内存峰值。这是一个解决方案:

$websiteQuery = $xpath->query("//a[@compid='Profile_Website']/@href");
foreach($websiteQuery as $web){
    $website = $web->nodeValue;
}

有谁知道为什么会这样?

0 个答案:

没有答案