Send a blank email to [email protected] to get a copy of this message
Hi!
Just stumbled upon the issue described in
https://bugs.php.net/bug.php?id=39771
during a Windows -> Linux migration.
The windows binaries for php 5.3.10 and 5.4 got no problems executing
the following:
<?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.
It is very confusing, that the provided windows binaries work, but the
compiled-it-myself php on linux does not.
Any insight on the correctness of this (documented) feature as well as
the windows / linux discrepancy is very appreciated.
Sincerely,
Nico