ID: 6500 Updated by: mfischer Reported By: [EMAIL PROTECTED] Old Status: Open Status: Feedback Bug Type: XML related Operating System: SuSE Linux 6.4 PHP Version: 4.0.2 New Comment:
Does this still apply to 4.1.1 ? Previous Comments: ------------------------------------------------------------------------ [2000-09-03 07:27:32] [EMAIL PROTECTED] 1. What do you mean with "It is decprecated"? I used the SYNTAX of the DOCUMENTATION --> PHP -> XML -> xml_set_object "<?php class xml { var $parser; function xml() { $this->parser = xml_parser_create(); xml_set_object($this->parser,&$this);" ------ How is the correct syntax? 2. XML-Class I removed 100 lines of code. Some parts now looking strange. The XML-HANDLER is just a small (but important) part of our ContentSystem. <?PHP class XML_HANDLER { var $O_DATA = array(); // The XML-PARSER resault var $O_STRICT = true; // If 'true' overwrite cdata is not allowed var $O_STACK = array(); // TAG-stack: tag_A --> tag_B --> tag_n var $O_XML_PARSER; // XML OBJECT PARSER function XML_HANDLER() { $this->O_LEVEL = -1; $this->O_XML_PARSER = xml_parser_create(); xml_set_object($this->O_XML_PARSER,&$this); xml_set_element_handler($this->O_XML_PARSER,"Tag_Start","Tag_End"); xml_set_character_data_handler($this->O_XML_PARSER,"CData"); xml_parser_set_option($this->O_XML_PARSER, XML_OPTION_CASE_FOLDING, 0); } function Run($A_FILE, $A_FILE_TYPE) { $this->O_FILE_TYPE = $A_FILE_TYPE; return $this->ParseFromFile($A_FILE); } function ParseFromFile($A_FILE) { $this->O_FILE = $A_FILE; $L_FP = @fopen($A_FILE, "r"); while($L_LINE = fread($L_FP, 4096)) xml_parse($this->O_XML_PARSER, $L_LINE, feof($L_FP)); fclose($L_FP); // var_dump($this->O_DATA); // ERROR !!!! $this->O_DATA is empty !!!!!!!! return $this->O_DATA[$this->O_FILE_TYPE]; } function Tag_Start($A_PARSER, $A_ELE_NAME, $A_ATTRIBS) { $this->O_LEVEL++; $this->O_STACK[$this->O_LEVEL] = $A_ELE_NAME; $L_EVAL = $this->Bild_Eval(); if (!$this->IsStrict()) { eval("\$L_ISSET = isset(\$this->O_DATA$L_EVAL);"); if ($L_ISSET) { $L_EVAL = $this->O_EVAL .'[0]'; eval("\$L_VAL = isset(\$this->O_DATA$L_EVAL);"); if (!$L_VAL) { $L_EVAL = $L_EVAL2 = $this->O_EVAL; $L_EVAL2 .= '[0]'; eval("\$L_DATA = \$this->O_DATA$L_EVAL;"); eval("unset(\$this->O_DATA$L_EVAL);"); eval("\$this->O_DATA$L_EVAL2 = \$L_DATA;"); } $L_EVAL = $this->O_EVAL; eval("\$L_COUNT = count(\$this->O_DATA$L_EVAL);"); $this->O_APPEND[$this->O_LEVEL] = "[$L_COUNT]"; $this->Bild_Eval(); } } if (!isset($A_ATTRIBS)) return; while(list($L_KEY, $L_VALUE) = each($A_ATTRIBS)) { $L_EVAL = $this->O_EVAL .'["ATTRIBUTE"]' .'["' .strtoupper($L_KEY) .'"]'; eval("\$this->O_DATA$L_EVAL = $L_VALUE;"); } // var_dump($this->O_DATA) // OK, no error !!!!!! } function Bild_Eval() { for ($L_L2=0; $L_L2 < $this->O_LEVEL+1; $L_L2++) $L_EVAL = $L_EVAL .'["' .$this->O_STACK[$L_L2] .'"]' .$this->O_APPEND[$L_L2]; return $this->O_EVAL = $L_EVAL; } function Tag_End($A_PARSER, $A_ELE_NAME) { unset($this->O_STACK[$this->O_LEVEL]); unset($this->O_APPEND[$this->O_LEVEL]); $this->O_LEVEL--; } function CData($A_PARSER, $A_DATA) { if (strlen(trim($A_DATA))==0) return; $L_EVAL = $this->O_EVAL .'["VALUE"]'; eval("\$this->O_DATA$L_EVAL = $A_DATA;"); } function IsStrict() { return $this->O_STRICT; } function SetStrict() { $this->O_STRICT = true; } function SetUnStrict() { $this->O_STRICT = false; } } ?> 3. XML-File <?xml version="1.0"?> <FEP_VARS> <STAT> <TORPEDO VERSION="V0300" DATE="20000701"/> </STAT> <RUNTIME> <SESSION> <NAME>"SESSID"</NAME> <TYPE>"s"</TYPE> </SESSION> <GENERATION>"3"</GENERATION> <DHTML>true</DHTML> <LANGUAGE>"en"</LANGUAGE> <CODE>"US"</CODE> <ERROR_LOG>"true"</ERROR_LOG> <IP_LOG>"true"</IP_LOG> <OBJECT>"USER"</OBJECT> <DB_HOE>true</DB_HOE> <DB>"fep_db"</DB> <DDT>"main"</DDT> </RUNTIME> </FEP_VARS> ------------------------------------------------------------------------ [2000-09-03 06:07:17] [EMAIL PROTECTED] 1. Don't use &$this syntax. It is decprecated 2. Could you cut down your script as much as possible and post it and the minimal XML reproducing buggy behaviour? ------------------------------------------------------------------------ [2000-09-03 05:58:25] [EMAIL PROTECTED] Sorry! But the error still exists! I know the (first) bug in PHP4.0.2 (warnings -> function of startElementHandler not found ....) and itīs fixed. The bug I described is a little different. It is not the "startElementHandler" itself. 1. CONSTRUCTOR function XML_HANDLER() { $this->O_XML_PARSER = xml_parser_create(); xml_set_object($this->O_XML_PARSER,&$this); xml_set_element_handler($this->O_XML_PARSER,"Tag_Start","Tag_End"); xml_set_character_data_handler($this->O_XML_PARSER,"CData"); } 2. Parse from file (function) ... some statements while($L_LINE = fread($L_FP, 4096)) { $this->O_LINE++; if(!xml_parse($this->O_XML_PARSER, $L_LINE, feof($L_FP))) die(sprintf("XML error: %s at line %d in file %s", xml_error_string(xml_get_error_code($this->O_XML_PARSER)), xml_get_current_line_number($this->O_XML_PARSER), $A_FILE)); } fclose($L_FP); ----> var_dump($this->O_DATA); ------------OUTPUT------------> array(0) ----> ERROR!!!!!!!!!!! 3. Tag_Start function function Tag_Start($A_PARSER, $A_ELE_NAME, $A_ATTRIBS) { if (!isset($A_ATTRIBS)) return; while(list($L_KEY, $L_VALUE) = each($A_ATTRIBS)) { $L_EVAL = $this->O_EVAL .'["ATTRIBUTE"]' .'["' .strtoupper($L_KEY) .'"]'; eval("\$this->O_DATA$L_EVAL = $L_VALUE;"); } ----> var_dump($this->O_DATA); -----------OUTPUT-----------> array(1) { ["FEP_VARS"]=> array(1) { ["STAT"]=> array(1) { ["TORPEDO"]=> array(1) { ["ATTRIBUTE"]=> array(2) { ["VERSION"]=> string(5) "V0300" ["DATE"]=> int(20000701) } } } } } ----> OK !!!!!!!!!!! } This is a very critical bug! Please check it... ------------------------------------------------------------------------ [2000-09-02 22:43:41] [EMAIL PROTECTED] Please try latest CVS or snapshot from http://snaps.php.net as this should be fixed 2 days ago. Reopen this bug report if problem still exists. --Jani ------------------------------------------------------------------------ [2000-09-02 05:05:24] [EMAIL PROTECTED] I use a class to handle XML-files. After the installation of version 4.0.2 (up to CVS-version 200009020045) I have problems with the XML functions. In the "startElementHandler" function I move the attribs into a variable ($this->DATA). A var_dump inside the "startElementHandler" shows the correct image of the XML attribs. But after parsing a XML-file (outside xml_set_element_handler or xml_set_character_data_handler) a var_dump($this->DATA) shows the following resault: array(0) In PHP beta, PHP4.0.0 and PHP4.0.1 I had no problems. I use a default php.ini file (without ZendOptimizer). Modules: default + mysql, zlib ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=6500&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]