mirror of
https://github.com/e107inc/e107.git
synced 2025-08-04 21:57:51 +02:00
e107 class destructor - work on Issue #278 Memory leaks
This commit is contained in:
@@ -373,6 +373,10 @@ if($tmp1)
|
|||||||
$tmp['replace'][] = $tmp1;
|
$tmp['replace'][] = $tmp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Shutdown
|
||||||
|
$e107->destruct();
|
||||||
|
|
||||||
if($tmp)
|
if($tmp)
|
||||||
{
|
{
|
||||||
$page = str_replace($tmp['search'], $tmp['replace'], ob_get_clean());
|
$page = str_replace($tmp['search'], $tmp['replace'], ob_get_clean());
|
||||||
|
@@ -324,6 +324,9 @@ echo "<div style='text-align:center; display:".$show."; position: absolute; widt
|
|||||||
unset($show);
|
unset($show);
|
||||||
echo "\n</body>\n</html>";
|
echo "\n</body>\n</html>";
|
||||||
|
|
||||||
|
// Shutdown
|
||||||
|
$e107->destruct();
|
||||||
|
|
||||||
//
|
//
|
||||||
// I Send the buffered page data, along with appropriate headers
|
// I Send the buffered page data, along with appropriate headers
|
||||||
//
|
//
|
||||||
|
@@ -238,6 +238,9 @@ class e107
|
|||||||
*/
|
*/
|
||||||
protected function __construct()
|
protected function __construct()
|
||||||
{
|
{
|
||||||
|
// FIXME registered shutdown functions not executed after the $page output in footer - investigate
|
||||||
|
// Currently manually called in front-end/admin footer
|
||||||
|
//register_shutdown_function(array($this, 'destruct'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3606,4 +3609,42 @@ class e107
|
|||||||
$this->{$name} = $ret;
|
$this->{$name} = $ret;
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function destruct()
|
||||||
|
{
|
||||||
|
if(null === self::$_instance) return;
|
||||||
|
|
||||||
|
$print = defined('E107_DBG_TIMEDETAILS') && E107_DBG_TIMEDETAILS;
|
||||||
|
!$print || print('Destructing $e107: <br />');
|
||||||
|
$vars = get_object_vars($this);
|
||||||
|
foreach ($vars as $name => $value)
|
||||||
|
{
|
||||||
|
if(is_object($value))
|
||||||
|
{
|
||||||
|
if(method_exists($value, '__destruct'))
|
||||||
|
{
|
||||||
|
!$print || print('object [property] using __destruct(): '.$path.' - '.get_class($value).'<br />');
|
||||||
|
$value->__destruct();
|
||||||
|
}
|
||||||
|
else !$print || print('object [property]: '.$name.' - '.get_class($value).'<br />');
|
||||||
|
$this->$name = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (self::$_registry as $path => $reg)
|
||||||
|
{
|
||||||
|
if(is_object($reg))
|
||||||
|
{
|
||||||
|
if(method_exists($reg, '__destruct'))
|
||||||
|
{
|
||||||
|
!$print || print('object [registry] using __destruct(): '.$path.' - '.get_class($reg).'<br />');
|
||||||
|
$reg->__destruct();
|
||||||
|
}
|
||||||
|
else !$print || print('object [registry]: '.$path.' - '.get_class($reg).'<br />');
|
||||||
|
unset(self::$_registry[$path]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
self::$_registry = null;
|
||||||
|
self::$_instance = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user