ID: 6500
Updated by: sander
Reported By: [EMAIL PROTECTED]
Old Status: Feedback
Status: No Feedback
Bug Type: XML related
Operating System: SuSE Linux 6.4
PHP Version: 4.0.2
New Comment:
No feedback.
Previous Comments:
------------------------------------------------------------------------
[2002-01-06 09:03:55] [EMAIL PROTECTED]
Does this still apply to 4.1.1 ?
------------------------------------------------------------------------
[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
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/?id=6500
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]