On Tue, 20 Mar 2012 23:27:50 +0100, Nicolai Scheer <sc...@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

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to