[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-internals
Subject:    [PHP-DEV] Freeing 0x001361F0 (24 bytes) (fwd)
From:       Robbin Zhang <zhangh () valuehunt ! com>
Date:       1999-09-30 22:27:13
[Download RAW message or body]

Greeting!

I have a memory leak problem. Hope you guys can take a look. Thanks 
in advance.

One class file, one test script, and the error message is

./t.htm:  Freeing 0x001361F0 (24 bytes), allocated in zend_execute.c on line 1550<br>
./t.htm:  Freeing 0x0015C920 (4 bytes), allocated in zend_hash.c on line 185<br>
./t.htm:  Freeing 0x0015C8C0 (41 bytes), allocated in zend_hash.c on line 175<br>

Also. My httpd reached 18M when doing test of similar scripts which php3.


Here is the test script 

###########################################
#!/usr/local/bin/php4
<?php 

error_reporting(63);

include("./class.test");

newhtml(&$w);

echo "DDD\n";

printhtml();

?>



Here is the class file

###########################################
<?php
    
    $_SEED = md5(microtime());

    function newhtml(&$w,$a = '') {     # Start the HTML page
        global $_LAYOUT,$_CURRENT_LINE,$_INDENT;
        $_LAYOUT = array(); $_CURRENT_LINE = $_INDENT = '';
        $w = window(&$a);
    }

    function printhtml() {              # Print out the final page
        global $_LAYOUT,$_CURRENT_LINE;
        $GLOBALS['_layout_all']->printit();
        $_LAYOUT[] = $_CURRENT_LINE;
        reset($_LAYOUT);
        while(list(,$_line) = each($_LAYOUT)) {
            echo $_line."\n";
        }
    }

    function insert($p,$c) {
        $GLOBALS["$p"]->insert($c);
    }

    function window($a = '') {
        global $_layout_all, $_layout_header;

        $_layout_all    = new Container('HTML');
        if(isset($a["indent"]) && !$a["indent"]) {
            $_layout_all->ident = false;
        }
        # Header Part
        $_layout_header = new Container('HEAD');
        insert('_layout_all','_layout_header');

        # Body Part
        $na = rname(); $GLOBALS["$na"] = new Container('BODY',&$a);
        insert('_layout_all',$na);
        return $na;
    }

    # Internal Functions
    function rname() {
        global $_SEED;

        static $_CNT  = 0;
        ++$_CNT;
        return $_SEED.$_CNT;
    }

    function getclass($c) {
        return $GLOBALS["$c"]->classname;
    }

    # Classes
    class HTMLBase {
        var $classname = 'htmlbase' ;
        var $ident = true;
        var $settings;
        var $children = "";
        var $level    = 0;
        var $default  = "";

        function insert($c) {
            $this->children[] = $c ;
            $GLOBALS["$c"]->level = $this->level + 1;
            if(!$this->ident) {
                $GLOBALS["$c"]->ident = $this->ident;
            }
        }

        function printchild() {
            if (is_array($this->children)) {
                reset($this->children);
                while( list($key,$ch) = each($this->children) ) {
                    $val = $this->children[$key];
                    $this->indent(+1);
                    $GLOBALS["$val"]->printit();
                    $this->indent();
                }
            }
        }

        function indent($p = 0) {
            global $_LAYOUT,$_CURRENT_LINE,$_INDENT;

            $l = $this->level + $p ;
            $_INDENT = '';
            for( $i=0; $i < $l ; ++$i ) {
                $_INDENT .=  '    ';
            }

            if($this->ident) {
                $_line = trim($_CURRENT_LINE);
                if(!empty($_line)) {
                    $_LAYOUT[] = $_CURRENT_LINE;
                }
                $_CURRENT_LINE = $_INDENT;
            }
        }

        function setparam($a = '') {

            $temp = array(); $this->settings = '' ;
            $def  = 'def_' . $this->classname;
            global $$def;

            if ( is_array($this->default) ) {
                while( list($key,$val) = each($this->default) ) {
                    $temp["$key"] = $val;
                }
            }

            if ( is_array(${$def}) ) {
                reset(${$def});
                while( list($key,$val) = each(${$def}) ) {
                    $temp["$key"] = $val;
                }
            }

            if ( is_array($a) ) {
                reset($a);
                while( list($key,$val) = each($a) ) {
                    $temp["$key"] = $val;
                }
            }

            reset($temp);
            while (list($key,$val) = each($temp) ) {
                $key = strtoupper($key);
                if ( $key == 'COLS'  && $this->classname == 'table' ) {
                    $this->cols = $val;
                    continue;
                }
                if ( $key == 'INDENT' ) {
                    $this->ident = $val;
                    continue;
                }

                if ( $key == 'COLSPAN' ) { $this->cs   = $val; }
                if ( $key == 'ROWSPAN' ) { $this->rs   = $val; }
                if ( $val == 'undef' || $val == 'UNDEF' ) {
                    $this->settings .= " $key";
                } else {
                    $this->settings .= " $key=\"$val\"";
                }
            }
        }
    }

    class Container extends HTMLBase {
        var $classname = 'container';
        var $tag       = 'none';

        function Container($t,$a = '') {
            $this->classname = strtolower($t);
            $this->tag       = strtoupper($t);
            $this->setparam($a);
        }

        function printit() {
            global $_CURRENT_LINE;
            $_CURRENT_LINE .= '<' . $this->tag . $this->settings . '>';
            $this->printchild();
            $this->indent();
            $_CURRENT_LINE .= '</' . $this->tag . '>';
        }
    }

?>





-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net
For additional commands, e-mail: php-dev-help@lists.php.net
To contact the list administrators, e-mail: php-list-admin@lists.php.net

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic