简单的HTML DOM在包含时会导致内存耗尽


Simple HTML DOM causes memory exhaustion when included

我有一个带有几个include的模板,并将Simple HTML DOM用于各种任务。

当我进入图书馆时,在一些页面上我会收到以下错误:

致命错误:允许的内存大小134217728字节已用完(已尝试分配28672字节)142

这是我在模板中的php代码:

<?php
$currentFile = $_SERVER["PHP_SELF"];
$parts = Explode('/', $currentFile); 
$page = $parts[count($parts) - 1];
$parent = basename(dirname($_SERVER['PHP_SELF']));
$both = $parent.'/'.$page;
$content = $filename.".html";
$sidebar = $filename. "-sidebar.html";
?>
<?php include('dom.php'); ?>
<?php 
if (!isset($title)) {
$html = file_get_html($_SERVER['DOCUMENT_ROOT'].'/aa/content/'.$content);
$element = $html->find('h1'); 
if ($element) {
$titletag = $element[0]->plaintext . ' | about-berlin.com';
}
    }
else {
$titletag = $title; 
}
$html->__destruct();
?>
<!DOCTYPE html>

奇怪的是,即使我只包含这样的库,而没有任何代码使用它,我也会遇到同样的内存错误:

<?php include('dom.php'); ?>

如果我不包括它,所有的运行都不会出错。

即使不使用似乎是大多数问题的原因的file_get_html(),怎么可能得到这个错误?在不更改php.ini的情况下,我可以尝试什么来解决此问题?

编辑

一些澄清。我的模板是这样工作的:

请求somepage.php。里面是以下代码:

<?php 
$path_parts = pathinfo(__FILE__);
$filename = $path_parts['filename'];
include ($_SERVER['DOCUMENT_ROOT'].'/aa/template.php');
?>

在模板中,相同名称的内容文件(somepage.php)包含在一个名为content的文件夹中。

尝试

$html->clear(); 
unset($html);

内存泄漏是由于php5循环引用内存泄漏造成的

 ?>
<?php include('dom.php'); ?>
<?php 

可以用代替

include('dom.php');

只是为了保持干净:)

更换

include(…);

include_once(…);

将阻止您的脚本包含多个脚本。如果你需要一个脚本使其工作,你应该使用

require_once(…);

我想你的dom.php还有另一个包含。也许在包含所示代码的脚本中。另一件事是,您应该删除打开php标记后的关闭php标记,以使代码更具可读性。类似的东西

?>
<?php

不是必要的。

您可以在.htaccess 中尝试

<IfModule mod_php5.c>
php_value memory_limit 64M
</IfModule>