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

时间:2013-07-24 16:59:43

标签: php memory-leaks simple-html-dom

我有一个包含几个包含的模板,并使用Simple HTML DOM执行各种任务。

当我参与图书馆时,在某些页面上我收到以下错误:

  

致命错误:允许的内存大小为134217728字节耗尽(尝试过   在C:\ xampp \ htdocs \ aa \ template.php中分配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');
?>

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

3 个答案:

答案 0 :(得分:2)

尝试

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

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

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

可以替换为

include('dom.php');

只是为了保持清洁:)

答案 1 :(得分:1)

更换

include(…);

include_once(…);

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

require_once(…);

我认为你的dom.php还有其他一些内容。也许在包含显示代码的脚本中。 另一件事是你应该删除open-php-tags后面的关闭php标签,以使代码更具可读性。像

这样的东西
?>
<?php

不是nessecary。

答案 2 :(得分:0)

你可以试试.htaccess

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