Re: DOMDocument->saveXML with node parameter
| From: | Gustavo Lopes | Date: | Tue, 20 Mar 2012 22:33:10 +0000 |
| Subject: | Re: DOMDocument->saveXML with node parameter | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-59100@lists.php.net to get a copy of this message | ||
On Tue, 20 Mar 2012 23:27:50 +0100, Nicolai Scheer <scope@planetavent.de> wrote:
<?php $doc = new DOMDocument(); $doc->loadHTML( '<html><body>Test</body></html>' ); $body = $doc->getElementsByTagName( 'body' )->item( 0 ); echo $doc->saveHTML( $body ); If I compile 5.3.10 myself (RHEL 5.7), I get the very same behaviour as described in the last comment of bug 39771: "PHP Warning: DOMDocument::saveHTML() expects exactly 0 parameters, 1 given" A quick look at the sources of 5.3.10 show, that there is indeed a optional node parameter: ext/dom/document.c:2296: if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|O!", &id, dom_document_class_entry, &nodep, dom_node_class_entry) == FAILURE) { return; } Yet, the arginfo does not reflect this, e.g. ext/dom/document.c:158: ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0) ZEND_END_ARG_INFO(); should read ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0) ZEND_ARG_OBJ_INFO(0, node, DOMNode, 1) ZEND_END_ARG_INFO(); If I allow for passing that optional parameter by adjusting the arginfo, the php snippet posted above works just fine. The documentation of DOMDocument::saveHTML is in sync with the implementation of dom_document_save_html, it seems that just the parameter checking is wrong.While the arginfo is in fact wrong and should be fixed, it cannot have the impact you're describing. The wrong arginfo for internal functions only affects reflection (except if it has typehints for classes). Most likely, you're loading an old version of the DOM extension (compiled with an earlier version of PHP 5.3). -- Gustavo Lopes