ID: 37440 Updated by: [EMAIL PROTECTED] Reported By: kenashkov at gmail dot com -Status: Open +Status: Wont fix Bug Type: XML related Operating System: Fedora Core 4 PHP Version: 4.4.2 New Comment:
We are sorry, but we can not support PHP 4 related problems anymore. Momentum is gathering for PHP 6, and we think supporting PHP 4 will lead to a waste of resources which we want to put into getting PHP 6 ready. Previous Comments: ------------------------------------------------------------------------ [2006-07-22 15:22:18] kenashkov at gmail dot com This can be reproduced useing the example from xml_set_object() function reference found here: http://www.php.net/manual/en/function.xml-set-object.php Here is the exact reproduce code: ------------------------------------- <?php class xml { var $parser; function xml() { $this->parser = xml_parser_create(); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, "tag_open", "tag_close"); xml_set_character_data_handler($this->parser, "cdata"); } function parse($data) { xml_parse($this->parser, $data); } function tag_open($parser, $tag, $attributes) { var_dump($parser, $tag, $attributes); } function cdata($parser, $cdata) { var_dump($parser, $cdata); } function tag_close($parser, $tag) { var_dump($parser, $tag); } } // end of class xml $xml_parser = new xml(); $xml_parser->parse("<A ID='hallo'>PHP</A>"); $xml_parser = new xml(); $xml_parser->parse("<A ID='hallo'>PHP</A>"); ?> ------------------------------------- The only modification in comparison with the given example in the manual is the second assignment of $xml_parser to a new object. The result is: ------------------------------------- resource(2) of type (xml) string(1) "A" array(1) { ["ID"]=> string(5) "hallo" } resource(2) of type (xml) string(3) "PHP" resource(2) of type (xml) string(1) "A" Warning: xml_parse() [function.xml-parse.html]: Unable to call handler tag_open() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on line 16 Warning: xml_parse() [function.xml-parse.html]: Unable to call handler cdata() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on line 16 Warning: xml_parse() [function.xml-parse.html]: Unable to call handler tag_close() in /home/local/dev.kenashkov.com/XPATS/bug_test/t4.php on line 16 ------------------------------------- It works as expected in PHP 5.1.4 The code produces the bug in PHP 4.4.2 with the following cofigure line: ------------------------------------- './configure' '--prefix=/web/php4.4.2' '--with-apxs2=/web/apache2-php4/bin/apxs' '--enable-bcmath=shared' '--with-bz2=shared' '--enable-calendar=shared' '--enable-ctype=shared' '--with-curl=shared' '--enable-dba=shared' '--enable-dbase=shared' '--enable-dbx=shared' '--enable-dio=shared' '--with-dom=shared' '--with-dom-xsl=shared' '--with-dom-xslt=shared' '--with-dom-exslt=shared' '--enable-exif=shared' '--with-fam=shared' '--enable-ftp=shared' '--with-gettext=shared' '--with-gmp=shared' '--with-iconv=shared' '--with-gd=shared' '--with-jpeg-dir' '--with-png-dir' '--with-xpm-dir' '--with-ttf' '--with-freetype-dir' '--enable-gd-native-ttf' '--with-ldap=shared' '--enable-mbstring=all' '--enable-mbstr-enc-trans' '--enable-mbregex' '--with-mime-magic=shared' '--with-mysql=/web/mysql-max-5.0.15-linux-i686-glibc23' '--with-ncurses=shared' '--with-openssl=shared' '--enable-overload=shared' '--enable-pcntl=shared' '--with-pgsql=shared' '--with-regex' '--enable-maintainer-zts' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-sysvmsg=shared' '--enable-shmop=shared' '--enable-sockets=shared' '--enable-memory-limit' '--enable-wddx=shared' '--with-zlib=shared' '--with-mhash=shared' '--with-mcrypt=shared' '--enable-xslt=shared' '--with-xslt-sablot' '--with-mssql=shared' '--with-kerberos=shared' '--enable-yp' '--enable-fastcgi' '--with-oci8=/u01/app/oracle/product/10.1.0/Db_1' ------------------------------------- ------------------------------------------------------------------------ [2006-05-14 20:11:51] kenashkov at gmail dot com Description: ------------ When assigning multiple times to ane variable an object which contains a XML parser, there is a problem when the xml_parse is called. The parser can not call the registered handlers. The problem can be avoided if the variable is unset before the second call, or using $doc1 =& new xml_doc() for every assignment. Reproduce code: --------------- <? class xml_doc { function xml_doc() { $this->res = xml_parser_create_ns(); xml_set_object($this->res,$this); xml_set_element_handler($this->res,'start_element','end_element'); } function load_string($string) { xml_parse($this->res,$string); } function start_element() { } function end_element() { } } $str = '<?xml version="1" encoding="UTF-8" standalone="yes"?><root></root>'; $doc1 = new xml_doc(); $doc1->load_string($str); //unset($doc1);//this solves the problem //or using $doc1 =& new xml_doc(); in every assignment $doc1 = new xml_doc(); $doc1->load_string($str); ?> Expected result: ---------------- Nothing really... it is too simple to do real parsing. Actual result: -------------- Warning: xml_parse() [function.xml-parse.html]: Unable to call handler start_element() in file.php on line 13 Warning: xml_parse() [function.xml-parse.html]: Unable to call handler end_element() in file.php on line 13 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37440&edit=1