diff options
-rw-r--r-- | ext/simplexml/examples/book.php | 5 | ||||
-rw-r--r-- | ext/simplexml/simplexml.c | 11 |
2 files changed, 9 insertions, 7 deletions
diff --git a/ext/simplexml/examples/book.php b/ext/simplexml/examples/book.php index 762f855c52..0416df861b 100644 --- a/ext/simplexml/examples/book.php +++ b/ext/simplexml/examples/book.php @@ -1,6 +1,7 @@ <?php -$books = simplexml_load_file('book.xml')->book; - +$books = simplexml_load_file('book.xml'); +//var_dump($books); +$books = $books->book; foreach ($books as $book) { echo "{$book->title} was written by {$book->author}\n"; } diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 7eb522d785..83de2cc692 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -783,13 +783,14 @@ sxe_object_dtor(void *object, zend_object_handle handle TSRMLS_DC) sxe = (php_sxe_object *) object; + FREE_HASHTABLE(sxe->zo.properties); + if (--sxe->document->refcount > 0) { return; } - xmlFreeDoc(sxe->document->ptr); - FREE_HASHTABLE(sxe->zo.properties); - + efree(sxe->document); + if (sxe->xpath) { xmlXPathFreeContext(sxe->xpath); } @@ -858,8 +859,8 @@ PHP_FUNCTION(simplexml_load_file) sxe = php_sxe_object_new(TSRMLS_C); sxe->document = emalloc(sizeof(simplexml_ref_obj)); - sxe->document->refcount = 1; sxe->document->ptr = (void *) xmlParseFile(filename); + sxe->document->refcount = 1; if (sxe->document->ptr == NULL) { efree(sxe->document); RETURN_FALSE; @@ -893,7 +894,7 @@ PHP_FUNCTION(simplexml_load_string) RETURN_FALSE; } sxe->nsmap = xmlHashCreate(10); - + return_value->type = IS_OBJECT; return_value->value.obj = php_sxe_register_object(sxe TSRMLS_CC); } |