23#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
30#ifdef LIBXML_SCHEMAS_ENABLED
31#include <libxml/relaxng.h>
32#include <libxml/xmlschemas.h>
51 xmlDtdPtr dtdptr = xmlGetIntSubset(docp);
80 xmlNodePtr root = xmlDocGetRootElement(docp);
96 const char *
encoding = (
const char *) docp->encoding;
122 goto invalid_encoding;
127 xmlCharEncodingHandlerPtr
handler = xmlFindCharEncodingHandler(
ZSTR_VAL(str));
131 if (docp->encoding !=
NULL) {
132 xmlFree(BAD_CAST docp->encoding);
134 docp->encoding = xmlStrdup((
const xmlChar *)
ZSTR_VAL(str));
136 goto invalid_encoding;
181 const char *version = (
const char *) docp->version;
183 if (version !=
NULL) {
199 if (php_dom_follow_spec_intern(obj)) {
207 if (docp->version !=
NULL) {
208 xmlFree(BAD_CAST docp->version);
211 docp->version = xmlStrdup((
const xmlChar *)
ZSTR_VAL(str));
378 const char *url = (
const char *) docp->URL;
382 if (php_dom_follow_spec_intern(obj)) {
399 if (docp->URL !=
NULL) {
400 xmlFree(BAD_CAST docp->URL);
403 docp->URL = xmlStrdup((
const xmlChar *)
ZSTR_VAL(str));
514 node = xmlNewDocFragment(docp);
541 node = xmlNewDocText(docp, BAD_CAST
value);
570 node = xmlNewDocComment(docp, BAD_CAST
value);
600 if (php_dom_follow_spec_intern(intern)) {
612 node = xmlNewCDataBlock(docp, BAD_CAST
value, value_len);
630 size_t value_len, name_len = 0;
640 if (xmlValidateName(BAD_CAST
name, 0) != 0) {
652 node = xmlNewDocPI(docp, BAD_CAST
name, BAD_CAST
value);
666PHP_METHOD(Dom_Document, createProcessingInstruction)
698 node = xmlNewDocProp(docp, BAD_CAST (lower ? lower :
ZSTR_VAL(
name)),
NULL);
721 xmlDocPtr docp =
NULL;
733 if (xmlValidateName(BAD_CAST
name, 0) != 0) {
738 node = xmlNewReference(docp, BAD_CAST
name);
756 xmlNodePtr nodep, retnodep;
773 if (nodep->doc == docp) {
782 xmlNsPtr nsptr =
NULL;
783 xmlNodePtr root = xmlDocGetRootElement(docp);
785 nsptr = xmlSearchNsByHref (docp, root, nodep->ns->href);
786 if (nsptr ==
NULL || nsptr->prefix ==
NULL) {
788 nsptr =
dom_get_ns(root, (
char *) nodep->ns->href, &errorcode, (
char *) nodep->ns->prefix);
791 if (nsptr !=
NULL && root ==
NULL) {
792 php_libxml_set_old_ns(docp, nsptr);
795 retnodep->ns = nsptr;
806 xmlNodePtr nodep, retnodep;
823 if (nodep->doc == docp) {
854 xmlNodePtr nodep =
NULL;
855 size_t value_len = 0;
870 if (errorcode == 0) {
871 if (xmlValidateName(BAD_CAST localname, 0) == 0) {
872 nodep = xmlNewDocNode(docp,
NULL, BAD_CAST localname, BAD_CAST
value);
879 xmlNsPtr nsptr = xmlSearchNsByHref(nodep->doc, nodep, BAD_CAST
ZSTR_VAL(uri));
893 if (errorcode != 0) {
918 if (errorcode == 0) {
923 const xmlChar *interned_localname = xmlDictLookup(docp->dict, localname, -1);
925 if (interned_localname ==
NULL) {
926 nodep = xmlNewDocNodeEatName(docp, ns, localname,
NULL);
929 nodep = xmlNewDocNodeEatName(docp, ns, BAD_CAST interned_localname,
NULL);
954 xmlNodePtr nodep =
NULL, root;
968 root = xmlDocGetRootElement(docp);
969 if (root !=
NULL || php_dom_follow_spec_intern(intern)) {
972 if (!php_dom_follow_spec_intern(intern)) {
979 nodep = (xmlNodePtr) xmlNewDocProp(docp, localname,
NULL);
986 if (php_dom_follow_spec_intern(intern)) {
990 nsptr = xmlSearchNsByHref(docp, root, BAD_CAST
ZSTR_VAL(uri));
995 php_libxml_set_old_ns(docp, nsptr);
998 if (nsptr ==
NULL || nsptr->prefix ==
NULL) {
1017 if (errorcode != 0) {
1018 xmlFreeProp((xmlAttrPtr) nodep);
1046 if (!dom_is_document_cache_modified_since_parsing(intern->document)) {
1047 const xmlAttr *attrp = xmlGetID(docp, BAD_CAST idname);
1048 if (attrp && attrp->parent) {
1058 const xmlNode *base = (
const xmlNode *) docp;
1059 const xmlNode *node = base->children;
1060 while (node !=
NULL) {
1070 node = php_dom_next_in_tree_order(node, base);
1076static zend_always_inline void php_dom_transfer_document_ref_single_node(xmlNodePtr node, php_libxml_ref_obj *new_document)
1078 php_libxml_node_ptr *iteration_object_ptr = node->_private;
1079 if (iteration_object_ptr) {
1080 php_libxml_node_object *iteration_object = iteration_object_ptr->_private;
1083 new_document->refcount++;
1084 php_libxml_decrement_doc_ref(iteration_object);
1085 iteration_object->document = new_document;
1089static void php_dom_transfer_document_ref(xmlNodePtr node, php_libxml_ref_obj *new_document)
1091 if (node->children) {
1092 php_dom_transfer_document_ref(node->children, new_document);
1098 php_dom_transfer_document_ref_single_node((xmlNodePtr)
attr, new_document);
1102 php_dom_transfer_document_ref_single_node(node, new_document);
1108#if LIBXML_VERSION < 21000
1109static xmlChar *libxml_copy_dicted_string(xmlDictPtr src_dict, xmlDictPtr dst_dict, xmlChar *str)
1114 if (xmlDictOwns(src_dict, str) == 1) {
1115 if (dst_dict ==
NULL) {
1116 return xmlStrdup(str);
1118 return BAD_CAST xmlDictLookup(dst_dict, str, -1);
1123static void libxml_fixup_name_and_content(xmlDocPtr src_doc, xmlDocPtr dst_doc, xmlNodePtr node)
1125 if (src_doc !=
NULL && dst_doc != src_doc && src_doc->dict !=
NULL) {
1126 node->name = libxml_copy_dicted_string(src_doc->dict, dst_doc->dict, BAD_CAST node->name);
1127 node->content = libxml_copy_dicted_string(src_doc->dict,
NULL, node->content);
1131static void libxml_fixup_name_and_content_element(xmlDocPtr src_doc, xmlDocPtr dst_doc, xmlNodePtr node)
1133 libxml_fixup_name_and_content(src_doc, dst_doc, node);
1135 libxml_fixup_name_and_content(src_doc, dst_doc, (xmlNodePtr)
attr);
1138 for (xmlNodePtr child = node->children; child !=
NULL; child = child->next) {
1139 libxml_fixup_name_and_content_element(src_doc, dst_doc, child);
1146 xmlDocPtr original_document = nodep->doc;
1147 php_libxml_invalidate_node_list_cache_from_doc(original_document);
1148 if (nodep->doc != new_document) {
1149 php_libxml_invalidate_node_list_cache(dom_object_new_document->
document);
1153 if (php_dom_follow_spec_intern(dom_object_new_document)) {
1154 xmlUnlinkNode(nodep);
1155 xmlSetTreeDoc(nodep, new_document);
1158#if LIBXML_VERSION < 21000
1159 libxml_fixup_name_and_content_element(original_document, new_document, nodep);
1162 int ret = xmlDOMWrapAdoptNode(
NULL, original_document, nodep, new_document,
NULL, 0);
1168 php_dom_transfer_document_ref(nodep, dom_object_new_document->
document);
1170 xmlUnlinkNode(nodep);
1188 DOM_GET_OBJ(nodep, node_zval, xmlNodePtr, dom_object_nodep);
1200 xmlDocPtr new_document;
1203 DOM_GET_OBJ(new_document, new_document_zval, xmlDocPtr, dom_object_new_document);
1250 xmlDoc *docp =
NULL, *olddoc;
1253 size_t encoding_len = 0, version_len = 0;
1254 unsigned int refcount;
1260 docp = xmlNewDoc(BAD_CAST version);
1267 if (encoding_len > 0) {
1268 docp->encoding = (
const xmlChar *) xmlStrdup(BAD_CAST
encoding);
1273 if (olddoc !=
NULL) {
1274 php_libxml_decrement_node_ptr((php_libxml_node_object *) intern);
1275 refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern);
1276 if (refcount != 0) {
1277 olddoc->_private =
NULL;
1281 if (php_libxml_increment_doc_ref((php_libxml_node_object *)intern, docp) == -1) {
1285 php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)docp, (
void *)intern);
1289const char *dom_get_valid_file_path(
const char *source,
char *resolved_path,
int resolved_path_len )
1293 const char *file_dest;
1296 uri = xmlCreateURI();
1300 escsource = xmlURIEscapeStr(BAD_CAST source, BAD_CAST
":");
1301 xmlParseURIReference(uri, (
char *) escsource);
1304 if (uri->scheme !=
NULL) {
1307 if (
strncasecmp(source,
"file://",7) == 0 &&
':' == source[8]) {
1319 }
else if (
strncasecmp(source,
"file://localhost/",17) == 0) {
1331 if ((uri->scheme ==
NULL || isFileUri)) {
1337 file_dest = resolved_path;
1349 xmlParserCtxtPtr ctxt =
NULL;
1350 int validate, recover, resolve_externals, keep_blanks, substitute_ent;
1351 int resolved_path_len;
1352 int old_error_reporting = 0;
1355 libxml_doc_props
const* doc_props;
1360 php_libxml_ref_obj *document = intern->
document;
1363 validate = doc_props->validateonparse;
1364 resolve_externals = doc_props->resolveexternals;
1365 keep_blanks = doc_props->preservewhitespace;
1366 substitute_ent = doc_props->substituteentities;
1367 recover = doc_props->recover || (
options & XML_PARSE_RECOVER) == XML_PARSE_RECOVER;
1376 const char *file_dest = dom_get_valid_file_path(source, resolved_path,
MAXPATHLEN);
1378 ctxt = xmlCreateFileParserCtxt(file_dest);
1381 ctxt = xmlCreateMemoryParserCtxt(source, source_len);
1397#elif defined(HAVE_GETWD)
1401 if(ctxt->directory !=
NULL) {
1402 xmlFree((
char *) ctxt->directory);
1404 resolved_path_len =
strlen(resolved_path);
1405 if (resolved_path[resolved_path_len - 1] !=
DEFAULT_SLASH) {
1407 resolved_path[++resolved_path_len] =
'\0';
1409 ctxt->directory = (
char *) xmlCanonicPath((
const xmlChar *) resolved_path);
1413 ctxt->vctxt.error = php_libxml_ctx_error;
1414 ctxt->vctxt.warning = php_libxml_ctx_warning;
1416 if (ctxt->sax !=
NULL) {
1417 ctxt->sax->error = php_libxml_ctx_error;
1418 ctxt->sax->warning = php_libxml_ctx_warning;
1421 if (validate && ! (
options & XML_PARSE_DTDVALID)) {
1422 options |= XML_PARSE_DTDVALID;
1424 if (resolve_externals && ! (
options & XML_PARSE_DTDATTR)) {
1427 if (substitute_ent && ! (
options & XML_PARSE_NOENT)) {
1430 if (keep_blanks == 0 && ! (
options & XML_PARSE_NOBLANKS)) {
1431 options |= XML_PARSE_NOBLANKS;
1437 php_libxml_sanitize_parse_ctxt_options(ctxt);
1438 xmlCtxtUseOptions(ctxt,
options);
1445 xmlParseDocument(ctxt);
1447 if (ctxt->wellFormed || recover) {
1454 ret->URL = xmlStrdup(BAD_CAST ctxt->directory);
1458 xmlFreeDoc(ctxt->myDoc);
1462 xmlFreeParserCtxt(ctxt);
1474 size_t old_modification_nr = 0;
1475 if (intern !=
NULL) {
1476 php_libxml_class_type class_type = PHP_LIBXML_CLASS_LEGACY;
1480 const php_libxml_ref_obj *doc_ptr = intern->
document;
1482 class_type = doc_ptr->class_type;
1483 old_modification_nr = doc_ptr->cache_tag.modification_nr;
1484 php_libxml_decrement_node_ptr((php_libxml_node_object *) intern);
1485 doc_prop = intern->
document->doc_props;
1487 unsigned int refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern);
1488 if (refcount != 0) {
1489 docp->_private =
NULL;
1493 if (php_libxml_increment_doc_ref((php_libxml_node_object *)intern, newdoc) == -1) {
1496 intern->document->doc_props = doc_prop;
1497 intern->document->class_type = class_type;
1500 php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)newdoc, (
void *)intern);
1502 if (old_modification_nr != 0) {
1503 intern->document->cache_tag.modification_nr = old_modification_nr;
1504 php_libxml_invalidate_node_list_cache(intern->document);
1563 size_t file_len = 0;
1574 if (file_len == 0) {
1584 bool format = doc_props->formatoutput;
1585 if (
options & LIBXML_SAVE_NOEMPTYTAG) {
1586 saveempty = xmlSaveNoEmptyTags;
1587 xmlSaveNoEmptyTags = 1;
1589 zend_long bytes = intern->
document->handlers->dump_doc_to_file(
file, docp, format, (
const char *) docp->encoding);
1590 if (
options & LIBXML_SAVE_NOEMPTYTAG) {
1591 xmlSaveNoEmptyTags = saveempty;
1609 int old_xml_save_no_empty_tags;
1619 bool format = doc_props->formatoutput;
1622 if (nodep !=
NULL) {
1625 if (node->doc != docp) {
1632 old_xml_save_no_empty_tags = xmlSaveNoEmptyTags;
1633 xmlSaveNoEmptyTags = (
options & LIBXML_SAVE_NOEMPTYTAG) ? 1 : 0;
1634 res = intern->
document->handlers->dump_node_to_str(docp, node, format, (
const char *) docp->encoding);
1635 xmlSaveNoEmptyTags = old_xml_save_no_empty_tags;
1637 int converted_options = XML_SAVE_AS_XML;
1638 if (
options & XML_SAVE_NO_DECL) {
1639 converted_options |= XML_SAVE_NO_DECL;
1642 converted_options |= XML_SAVE_FORMAT;
1646 old_xml_save_no_empty_tags = xmlSaveNoEmptyTags;
1647 xmlSaveNoEmptyTags = (
options & LIBXML_SAVE_NOEMPTYTAG) ? 1 : 0;
1648 res = intern->
document->handlers->dump_doc_to_str(docp, converted_options, (
const char *) docp->encoding);
1649 xmlSaveNoEmptyTags = old_xml_save_no_empty_tags;
1671static void dom_xinclude_strip_references_for_attributes(xmlNodePtr basep)
1673 for (xmlAttrPtr prop = basep->properties; prop; prop = prop->next) {
1674 php_libxml_node_free_resource((xmlNodePtr) prop);
1675 for (xmlNodePtr child = prop->children; child; child = child->next) {
1676 php_libxml_node_free_resource(child);
1681static void dom_xinclude_strip_references(xmlNodePtr basep)
1683 php_libxml_node_free_resource(basep);
1684 dom_xinclude_strip_references_for_attributes(basep);
1686 xmlNodePtr
current = basep->children;
1689 php_libxml_node_free_resource(
current);
1691 dom_xinclude_strip_references_for_attributes(
current);
1701static void dom_xinclude_strip_fallback_references(
const xmlNode *basep)
1703 xmlNodePtr
current = basep->children;
1709 && xmlStrEqual(
current->name, XINCLUDE_NODE)
1710 && (xmlStrEqual(
current->ns->href, XINCLUDE_NS) || xmlStrEqual(
current->ns->href, XINCLUDE_OLD_NS))) {
1711 dom_xinclude_strip_references(
current);
1720 dom_xinclude_strip_fallback_references((
const xmlNode *) docp);
1722 flags |= XML_PARSE_NOXINCNODE;
1723 PHP_LIBXML_SANITIZE_GLOBALS(xinclude);
1724 int err = xmlXIncludeProcessFlags(docp, (
int)
flags);
1725 PHP_LIBXML_RESTORE_GLOBALS(xinclude);
1727 php_libxml_invalidate_node_list_cache(intern->
document);
1750 int err = dom_perform_xinclude(docp, intern,
flags);
1776 int err = dom_perform_xinclude(docp, intern,
flags);
1801 PHP_LIBXML_SANITIZE_GLOBALS(validate);
1802 cvp = xmlNewValidCtxt();
1804 cvp->userData =
NULL;
1805 cvp->error = (xmlValidityErrorFunc) php_libxml_error_handler;
1806 cvp->warning = (xmlValidityErrorFunc) php_libxml_error_handler;
1808 if (xmlValidateDocument(cvp, docp)) {
1813 PHP_LIBXML_RESTORE_GLOBALS(validate);
1815 xmlFreeValidCtxt(cvp);
1820#ifdef LIBXML_SCHEMAS_ENABLED
1826 char *source =
NULL;
1827 const char *valid_file =
NULL;
1828 size_t source_len = 0;
1831 xmlSchemaParserCtxtPtr parser;
1833 xmlSchemaValidCtxtPtr vptr;
1849 PHP_LIBXML_SANITIZE_GLOBALS(new_parser_ctxt);
1854 PHP_LIBXML_RESTORE_GLOBALS(new_parser_ctxt);
1858 valid_file = dom_get_valid_file_path(source, resolved_path,
MAXPATHLEN);
1860 PHP_LIBXML_RESTORE_GLOBALS(new_parser_ctxt);
1864 parser = xmlSchemaNewParserCtxt(valid_file);
1867 parser = xmlSchemaNewMemParserCtxt(source, source_len);
1875 xmlSchemaSetParserErrors(parser,
1876 (xmlSchemaValidityErrorFunc) php_libxml_error_handler,
1877 (xmlSchemaValidityWarningFunc) php_libxml_error_handler,
1879 sptr = xmlSchemaParse(parser);
1880 xmlSchemaFreeParserCtxt(parser);
1881 PHP_LIBXML_RESTORE_GLOBALS(new_parser_ctxt);
1891 vptr = xmlSchemaNewValidCtxt(sptr);
1893 xmlSchemaFree(sptr);
1898 if (
flags & XML_SCHEMA_VAL_VC_I_CREATE) {
1899 valid_opts |= XML_SCHEMA_VAL_VC_I_CREATE;
1902 PHP_LIBXML_SANITIZE_GLOBALS(validate);
1903 xmlSchemaSetValidOptions(vptr, valid_opts);
1904 xmlSchemaSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr);
1905 is_valid = xmlSchemaValidateDoc(vptr, docp);
1906 xmlSchemaFree(sptr);
1907 xmlSchemaFreeValidCtxt(vptr);
1908 PHP_LIBXML_RESTORE_GLOBALS(validate);
1910 if (is_valid == 0) {
1937 char *source =
NULL;
1938 const char *valid_file =
NULL;
1939 size_t source_len = 0;
1940 xmlRelaxNGParserCtxtPtr parser;
1942 xmlRelaxNGValidCtxtPtr vptr;
1964 valid_file = dom_get_valid_file_path(source, resolved_path,
MAXPATHLEN);
1969 parser = xmlRelaxNGNewParserCtxt(valid_file);
1972 parser = xmlRelaxNGNewMemParserCtxt(source, source_len);
1980 PHP_LIBXML_SANITIZE_GLOBALS(parse);
1981 xmlRelaxNGSetParserErrors(parser,
1982 (xmlRelaxNGValidityErrorFunc) php_libxml_error_handler,
1983 (xmlRelaxNGValidityWarningFunc) php_libxml_error_handler,
1985 sptr = xmlRelaxNGParse(parser);
1986 xmlRelaxNGFreeParserCtxt(parser);
1987 PHP_LIBXML_RESTORE_GLOBALS(parse);
1995 vptr = xmlRelaxNGNewValidCtxt(sptr);
1997 xmlRelaxNGFree(sptr);
2002 xmlRelaxNGSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr);
2003 is_valid = xmlRelaxNGValidateDoc(vptr, docp);
2004 xmlRelaxNGFree(sptr);
2005 xmlRelaxNGFreeValidCtxt(vptr);
2007 if (is_valid == 0) {
2031#ifdef LIBXML_HTML_ENABLED
2038 htmlParserCtxtPtr ctxt;
2059 ctxt = htmlCreateFileParserCtxt(source,
NULL);
2065 ctxt = htmlCreateMemoryParserCtxt(source, (
int)source_len);
2073 ctxt->vctxt.error = php_libxml_ctx_error;
2074 ctxt->vctxt.warning = php_libxml_ctx_warning;
2075 if (ctxt->sax !=
NULL) {
2076 ctxt->sax->error = php_libxml_ctx_error;
2077 ctxt->sax->warning = php_libxml_ctx_warning;
2079 php_libxml_sanitize_parse_ctxt_options(ctxt);
2081 htmlCtxtUseOptions(ctxt, (
int)
options);
2083 htmlParseDocument(ctxt);
2084 xmlDocPtr newdoc = ctxt->myDoc;
2085 htmlFreeParserCtxt(ctxt);
2121 if (file_len == 0) {
2129 encoding = (
const char *) htmlGetMetaEncoding(docp);
2132 format = doc_props->formatoutput;
2133 bytes = htmlSaveFileFormat(
file, docp,
encoding, format);
2148 xmlOutputBufferPtr outBuf;
2163 format = doc_props->formatoutput;
2165 if (nodep !=
NULL) {
2168 if (node->doc != docp) {
2173 buf = xmlBufferCreate();
2178 outBuf = xmlOutputBufferCreateBuffer(
buf,
NULL);
2186 for (node = node->children; node; node = node->next) {
2187 htmlNodeDumpFormatOutput(outBuf, docp, node,
NULL, format);
2188 if (outBuf->error) {
2193 htmlNodeDumpFormatOutput(outBuf, docp, node,
NULL, format);
2195 if (!outBuf->error) {
2196 xmlOutputBufferFlush(outBuf);
2197 const xmlChar *mem = xmlBufferContent(
buf);
2201 int size = xmlBufferLength(
buf);
2208 xmlOutputBufferClose(outBuf);
2211 xmlChar *mem =
NULL;
2213 htmlDocDumpMemoryFormat(docp, &mem, &
size, format);
2214 if (!
size || !mem) {
2242 if (ce ==
NULL || instanceof_function(ce, basece)) {
file(string $filename, int $flags=0, $context=null)
PHP_DOM_EXPORT zend_class_entry * dom_modern_node_class_entry
PHP_DOM_EXPORT zend_class_entry * dom_node_class_entry
zend_result dom_document_strict_error_checking_write(dom_object *obj, zval *newval)
zend_result dom_document_format_output_read(dom_object *obj, zval *retval)
zend_result dom_document_standalone_write(dom_object *obj, zval *newval)
zend_result dom_document_standalone_read(dom_object *obj, zval *retval)
zend_result dom_document_strict_error_checking_read(dom_object *obj, zval *retval)
zend_result dom_document_substitue_entities_write(dom_object *obj, zval *newval)
zend_result dom_document_recover_read(dom_object *obj, zval *retval)
zend_result dom_document_resolve_externals_read(dom_object *obj, zval *retval)
zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
zend_result dom_document_format_output_write(dom_object *obj, zval *newval)
zend_result dom_document_substitue_entities_read(dom_object *obj, zval *retval)
zend_result dom_document_document_uri_write(dom_object *obj, zval *newval)
zend_result dom_document_config_read(dom_object *obj, zval *retval)
zend_result dom_document_actual_encoding_read(dom_object *obj, zval *retval)
zend_result dom_document_document_uri_read(dom_object *obj, zval *retval)
zend_result dom_document_resolve_externals_write(dom_object *obj, zval *newval)
zend_result dom_document_recover_write(dom_object *obj, zval *newval)
#define DOM_PROP_NODE(type, name, obj)
zend_result dom_document_preserve_whitespace_write(dom_object *obj, zval *newval)
zend_result dom_document_validate_on_parse_read(dom_object *obj, zval *retval)
zend_result dom_document_implementation_read(dom_object *obj, zval *retval)
zend_result dom_document_validate_on_parse_write(dom_object *obj, zval *newval)
zend_result dom_document_encoding_write(dom_object *obj, zval *newval)
zend_result dom_document_version_write(dom_object *obj, zval *newval)
zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
zend_result dom_document_version_read(dom_object *obj, zval *retval)
zend_result dom_document_preserve_whitespace_read(dom_object *obj, zval *retval)
void php_dom_throw_error_with_message(dom_exception_code error_code, const char *error_message, bool strict_error)
void php_dom_throw_error(dom_exception_code error_code, bool strict_error)
@ INVALID_MODIFICATION_ERR
zend_ffi_ctype_name_buf buf
PHPAPI char * expand_filepath(const char *filepath, char *real_path)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_get_ns_raw_prefix_string(php_dom_libxml_ns_mapper *mapper, const xmlChar *prefix, size_t prefix_len, zend_string *uri)
PHP_DOM_EXPORT xmlNsPtr php_dom_libxml_ns_mapper_ensure_html_ns(php_dom_libxml_ns_mapper *mapper)
PHP_DOM_EXPORT void php_dom_libxml_reconcile_modern(php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr node)
PHP_DOM_EXPORT php_dom_libxml_ns_mapper * php_dom_get_ns_mapper(dom_object *object)
void php_dom_create_implementation(zval *retval, bool modern)
void dom_parent_node_replace_children(dom_object *context, zval *nodes, uint32_t nodesc)
xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix)
#define DOM_DOCUMENT_MALFORMED
xmlDocPtr dom_document_parser(zval *id, dom_load_mode mode, const char *source, size_t source_len, size_t options, xmlCharEncodingHandlerPtr encoding)
int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len)
bool php_dom_adopt_node(xmlNodePtr nodep, dom_object *dom_object_new_document, xmlDocPtr new_document)
bool dom_compare_value(const xmlAttr *attr, const xmlChar *value)
xmlNodePtr dom_clone_node(php_dom_libxml_ns_mapper *ns_mapper, xmlNodePtr node, xmlDocPtr doc, bool recursive)
#define PHP_DOM_DEPRECATED_PROPERTY(message)
bool dom_get_strict_error(php_libxml_ref_obj *document)
xmlNsPtr dom_get_ns_unchecked(xmlNodePtr nodep, char *uri, char *prefix)
#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern)
bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
void php_dom_normalize_legacy(xmlNodePtr nodep)
int dom_validate_and_extract(const zend_string *namespace, const zend_string *qname, xmlChar **localName, xmlChar **prefix)
dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document)
void dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece, zend_class_entry *ce)
libxml_doc_props const * dom_get_doc_props_read_only(const php_libxml_ref_obj *document)
#define DOM_GET_THIS_INTERN(__intern)
const XML_DOCUMENT_TYPE_NODE
const XML_HTML_DOCUMENT_NODE
const XML_DOCUMENT_FRAG_NODE
PHP_JSON_API size_t int options
xmlCharEncodingHandlerPtr encoding
php_libxml_ref_obj * document
PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj)
struct _dom_object dom_object
#define DOM_RET_OBJ(obj, domobject)
libxml_doc_props * dom_doc_propsptr
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API ZEND_COLD void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, const char *format,...)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define Z_PARAM_PATH_STR(dest)
#define CHECK_NULL_PATH(p, l)
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_STR_OR_NULL(dest)
#define ZVAL_STRING(z, s)
#define zend_parse_parameters_none()
#define Z_PARAM_STRING(dest, dest_len)
#define Z_PARAM_STR(dest)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define RETURN_NEW_STR(s)
#define RETURN_OBJ_COPY(r)
#define RETVAL_STRINGL(s, l)
error_reporting(?int $error_level=null)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_ACC_ABSTRACT
#define strncasecmp(s1, s2, n)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
struct _zend_string zend_string
ZEND_API char *ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length)
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
#define zend_always_inline
#define ZEND_UNREACHABLE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
#define ZEND_SIZE_T_INT_OVFL(size)
#define ZEND_LONG_EXCEEDS_INT(zlong)
#define zend_string_equals_literal(str, literal)
ZEND_RESULT_CODE zend_result
#define VCWD_GETCWD(buff, size)
#define VCWD_REALPATH(path, real_path)
fbc internal_function handler(call, ret)