Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.112
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
php-7.4.33 /
ext /
dom /
Delete
Unzip
Name
Size
Permission
Date
Action
.libs
[ DIR ]
drwxr-xr-x
2024-03-12 14:24
tests
[ DIR ]
drwxrwxr-x
2022-10-31 11:36
CREDITS
52
B
-rw-rw-r--
2022-10-31 11:36
attr.c
5.81
KB
-rw-rw-r--
2022-10-31 11:36
attr.lo
311
B
-rw-r--r--
2024-03-12 14:24
attr.o
99.89
KB
-rw-r--r--
2024-03-12 14:24
cdatasection.c
2.49
KB
-rw-rw-r--
2022-10-31 11:36
cdatasection.lo
335
B
-rw-r--r--
2024-03-12 14:24
cdatasection.o
85.23
KB
-rw-r--r--
2024-03-12 14:24
characterdata.c
9.74
KB
-rw-rw-r--
2022-10-31 11:36
characterdata.lo
338
B
-rw-r--r--
2024-03-12 14:24
characterdata.o
110.14
KB
-rw-r--r--
2024-03-12 14:24
comment.c
2.48
KB
-rw-rw-r--
2022-10-31 11:36
comment.lo
320
B
-rw-r--r--
2024-03-12 14:24
comment.o
85.09
KB
-rw-r--r--
2024-03-12 14:24
config.m4
1.25
KB
-rw-rw-r--
2022-10-31 11:36
config.w32
1.14
KB
-rw-rw-r--
2022-10-31 11:36
document.c
58.02
KB
-rw-rw-r--
2022-10-31 11:36
document.lo
323
B
-rw-r--r--
2024-03-12 14:24
document.o
256.94
KB
-rw-r--r--
2024-03-12 14:24
documentfragment.c
4.3
KB
-rw-rw-r--
2022-10-31 11:36
documentfragment.lo
347
B
-rw-r--r--
2024-03-12 14:24
documentfragment.o
90.15
KB
-rw-r--r--
2024-03-12 14:24
documenttype.c
5.51
KB
-rw-rw-r--
2022-10-31 11:36
documenttype.lo
335
B
-rw-r--r--
2024-03-12 14:24
documenttype.o
101.68
KB
-rw-r--r--
2024-03-12 14:24
dom_ce.h
3.39
KB
-rw-rw-r--
2022-10-31 11:36
dom_fe.h
10.49
KB
-rw-rw-r--
2022-10-31 11:36
dom_iterators.c
9.08
KB
-rw-rw-r--
2022-10-31 11:36
dom_iterators.lo
338
B
-rw-r--r--
2024-03-12 14:24
dom_iterators.o
104.88
KB
-rw-r--r--
2024-03-12 14:24
dom_properties.h
8.25
KB
-rw-rw-r--
2022-10-31 11:36
domconfiguration.c
3.32
KB
-rw-rw-r--
2022-10-31 11:36
domconfiguration.lo
347
B
-rw-r--r--
2024-03-12 14:24
domconfiguration.o
77.56
KB
-rw-r--r--
2024-03-12 14:24
domerror.c
3.22
KB
-rw-rw-r--
2022-10-31 11:36
domerror.lo
323
B
-rw-r--r--
2024-03-12 14:24
domerror.o
79.62
KB
-rw-r--r--
2024-03-12 14:24
domerrorhandler.c
2.2
KB
-rw-rw-r--
2022-10-31 11:36
domerrorhandler.lo
344
B
-rw-r--r--
2024-03-12 14:24
domerrorhandler.o
76.18
KB
-rw-r--r--
2024-03-12 14:24
domexception.c
3.43
KB
-rw-rw-r--
2022-10-31 11:36
domexception.lo
335
B
-rw-r--r--
2024-03-12 14:24
domexception.o
82.43
KB
-rw-r--r--
2024-03-12 14:24
domimplementation.c
7.91
KB
-rw-rw-r--
2022-10-31 11:36
domimplementation.lo
350
B
-rw-r--r--
2024-03-12 14:24
domimplementation.o
97.34
KB
-rw-r--r--
2024-03-12 14:24
domimplementationlist.c
2.43
KB
-rw-rw-r--
2022-10-31 11:36
domimplementationlist.lo
362
B
-rw-r--r--
2024-03-12 14:24
domimplementationlist.o
79.84
KB
-rw-r--r--
2024-03-12 14:24
domimplementationsource.c
2.9
KB
-rw-rw-r--
2022-10-31 11:36
domimplementationsource.lo
368
B
-rw-r--r--
2024-03-12 14:24
domimplementationsource.o
76.97
KB
-rw-r--r--
2024-03-12 14:24
domlocator.c
2.91
KB
-rw-rw-r--
2022-10-31 11:36
domlocator.lo
329
B
-rw-r--r--
2024-03-12 14:24
domlocator.o
79.38
KB
-rw-r--r--
2024-03-12 14:24
domstringlist.c
2.33
KB
-rw-rw-r--
2022-10-31 11:36
domstringlist.lo
338
B
-rw-r--r--
2024-03-12 14:24
domstringlist.o
79.76
KB
-rw-r--r--
2024-03-12 14:24
element.c
34.53
KB
-rw-rw-r--
2022-10-31 11:36
element.lo
320
B
-rw-r--r--
2024-03-12 14:24
element.o
170.13
KB
-rw-r--r--
2024-03-12 14:24
entity.c
4.18
KB
-rw-rw-r--
2022-10-31 11:36
entity.lo
317
B
-rw-r--r--
2024-03-12 14:24
entity.o
93.54
KB
-rw-r--r--
2024-03-12 14:24
entityreference.c
2.67
KB
-rw-rw-r--
2022-10-31 11:36
entityreference.lo
344
B
-rw-r--r--
2024-03-12 14:24
entityreference.o
85.67
KB
-rw-r--r--
2024-03-12 14:24
namednodemap.c
9.89
KB
-rw-rw-r--
2022-10-31 11:36
namednodemap.lo
335
B
-rw-r--r--
2024-03-12 14:24
namednodemap.o
97.97
KB
-rw-r--r--
2024-03-12 14:24
namelist.c
2.74
KB
-rw-rw-r--
2022-10-31 11:36
namelist.lo
323
B
-rw-r--r--
2024-03-12 14:24
namelist.o
80.4
KB
-rw-r--r--
2024-03-12 14:24
node.c
46.67
KB
-rw-rw-r--
2022-10-31 11:36
node.lo
311
B
-rw-r--r--
2024-03-12 14:24
node.o
218.23
KB
-rw-r--r--
2024-03-12 14:24
nodelist.c
5.36
KB
-rw-rw-r--
2022-10-31 11:36
nodelist.lo
323
B
-rw-r--r--
2024-03-12 14:24
nodelist.o
90.8
KB
-rw-r--r--
2024-03-12 14:24
notation.c
2.57
KB
-rw-rw-r--
2022-10-31 11:36
notation.lo
323
B
-rw-r--r--
2024-03-12 14:24
notation.o
89.34
KB
-rw-r--r--
2024-03-12 14:24
php_dom.c
59.72
KB
-rw-rw-r--
2022-10-31 11:36
php_dom.h
5.93
KB
-rw-rw-r--
2022-10-31 11:36
php_dom.lo
320
B
-rw-r--r--
2024-03-12 14:24
php_dom.o
308.54
KB
-rw-r--r--
2024-03-12 14:24
processinginstruction.c
4.17
KB
-rw-rw-r--
2022-10-31 11:36
processinginstruction.lo
362
B
-rw-r--r--
2024-03-12 14:24
processinginstruction.o
95.63
KB
-rw-r--r--
2024-03-12 14:24
string_extend.c
2.67
KB
-rw-rw-r--
2022-10-31 11:36
string_extend.lo
338
B
-rw-r--r--
2024-03-12 14:24
string_extend.o
76.8
KB
-rw-r--r--
2024-03-12 14:24
text.c
6.29
KB
-rw-rw-r--
2022-10-31 11:36
text.lo
311
B
-rw-r--r--
2024-03-12 14:24
text.o
97.77
KB
-rw-r--r--
2024-03-12 14:24
typeinfo.c
2.1
KB
-rw-rw-r--
2022-10-31 11:36
typeinfo.lo
323
B
-rw-r--r--
2024-03-12 14:24
typeinfo.o
76.01
KB
-rw-r--r--
2024-03-12 14:24
userdatahandler.c
1.99
KB
-rw-rw-r--
2022-10-31 11:36
userdatahandler.lo
344
B
-rw-r--r--
2024-03-12 14:24
userdatahandler.o
75.76
KB
-rw-r--r--
2024-03-12 14:24
xml_common.h
3.36
KB
-rw-rw-r--
2022-10-31 11:36
xpath.c
15.04
KB
-rw-rw-r--
2022-10-31 11:36
xpath.lo
314
B
-rw-r--r--
2024-03-12 14:24
xpath.o
138.91
KB
-rw-r--r--
2024-03-12 14:24
Save
Rename
/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Christian Stocker <chregu@php.net> | | Rob Richards <rrichards@php.net> | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #if HAVE_LIBXML && HAVE_DOM #include "php_dom.h" #define PHP_DOM_XPATH_QUERY 0 #define PHP_DOM_XPATH_EVALUATE 1 /* * class DOMXPath */ #if defined(LIBXML_XPATH_ENABLED) /* {{{ arginfo */ ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_xpath_construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, doc, DOMDocument, 0) ZEND_END_ARG_INFO(); ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_xpath_register_ns, 0, 0, 2) ZEND_ARG_INFO(0, prefix) ZEND_ARG_INFO(0, uri) ZEND_END_ARG_INFO(); ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_xpath_query, 0, 0, 1) ZEND_ARG_INFO(0, expr) ZEND_ARG_OBJ_INFO(0, context, DOMNode, 1) ZEND_ARG_INFO(0, registerNodeNS) ZEND_END_ARG_INFO(); ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_xpath_evaluate, 0, 0, 1) ZEND_ARG_INFO(0, expr) ZEND_ARG_OBJ_INFO(0, context, DOMNode, 1) ZEND_ARG_INFO(0, registerNodeNS) ZEND_END_ARG_INFO(); ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_xpath_register_php_functions, 0, 0, 0) ZEND_END_ARG_INFO(); /* }}} */ const zend_function_entry php_dom_xpath_class_functions[] = { PHP_ME(domxpath, __construct, arginfo_dom_xpath_construct, ZEND_ACC_PUBLIC) PHP_FALIAS(registerNamespace, dom_xpath_register_ns, arginfo_dom_xpath_register_ns) PHP_FALIAS(query, dom_xpath_query, arginfo_dom_xpath_query) PHP_FALIAS(evaluate, dom_xpath_evaluate, arginfo_dom_xpath_evaluate) PHP_FALIAS(registerPhpFunctions, dom_xpath_register_php_functions, arginfo_dom_xpath_register_php_functions) PHP_FE_END }; static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type) /* {{{ */ { zval retval; int result, i; int error = 0; zend_fcall_info fci; xmlXPathObjectPtr obj; char *str; zend_string *callable = NULL; dom_xpath_object *intern; if (! zend_is_executing()) { xmlGenericError(xmlGenericErrorContext, "xmlExtFunctionTest: Function called from outside of PHP\n"); error = 1; } else { intern = (dom_xpath_object *) ctxt->context->userData; if (intern == NULL) { xmlGenericError(xmlGenericErrorContext, "xmlExtFunctionTest: failed to get the internal object\n"); error = 1; } else if (intern->registerPhpFunctions == 0) { xmlGenericError(xmlGenericErrorContext, "xmlExtFunctionTest: PHP Object did not register PHP functions\n"); error = 1; } } if (error == 1) { for (i = nargs - 1; i >= 0; i--) { obj = valuePop(ctxt); xmlXPathFreeObject(obj); } return; } fci.param_count = nargs - 1; if (fci.param_count > 0) { fci.params = safe_emalloc(fci.param_count, sizeof(zval), 0); } /* Reverse order to pop values off ctxt stack */ for (i = nargs - 2; i >= 0; i--) { obj = valuePop(ctxt); switch (obj->type) { case XPATH_STRING: ZVAL_STRING(&fci.params[i], (char *)obj->stringval); break; case XPATH_BOOLEAN: ZVAL_BOOL(&fci.params[i], obj->boolval); break; case XPATH_NUMBER: ZVAL_DOUBLE(&fci.params[i], obj->floatval); break; case XPATH_NODESET: if (type == 1) { str = (char *)xmlXPathCastToString(obj); ZVAL_STRING(&fci.params[i], str); xmlFree(str); } else if (type == 2) { int j; if (obj->nodesetval && obj->nodesetval->nodeNr > 0) { array_init(&fci.params[i]); for (j = 0; j < obj->nodesetval->nodeNr; j++) { xmlNodePtr node = obj->nodesetval->nodeTab[j]; zval child; /* not sure, if we need this... it's copied from xpath.c */ if (node->type == XML_NAMESPACE_DECL) { xmlNsPtr curns; xmlNodePtr nsparent; nsparent = node->_private; curns = xmlNewNs(NULL, node->name, NULL); if (node->children) { curns->prefix = xmlStrdup((xmlChar *) node->children); } if (node->children) { node = xmlNewDocNode(node->doc, NULL, (xmlChar *) node->children, node->name); } else { node = xmlNewDocNode(node->doc, NULL, (xmlChar *) "xmlns", node->name); } node->type = XML_NAMESPACE_DECL; node->parent = nsparent; node->ns = curns; } php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&fci.params[i], &child); } } else { ZVAL_EMPTY_ARRAY(&fci.params[i]); } } break; default: ZVAL_STRING(&fci.params[i], (char *)xmlXPathCastToString(obj)); } xmlXPathFreeObject(obj); } fci.size = sizeof(fci); obj = valuePop(ctxt); if (obj->stringval == NULL) { php_error_docref(NULL, E_WARNING, "Handler name must be a string"); xmlXPathFreeObject(obj); if (fci.param_count > 0) { for (i = 0; i < nargs - 1; i++) { zval_ptr_dtor(&fci.params[i]); } efree(fci.params); } return; } ZVAL_STRING(&fci.function_name, (char *) obj->stringval); xmlXPathFreeObject(obj); fci.object = NULL; fci.retval = &retval; fci.no_separation = 0; if (!zend_make_callable(&fci.function_name, &callable)) { php_error_docref(NULL, E_WARNING, "Unable to call handler %s()", ZSTR_VAL(callable)); } else if (intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable) == 0) { php_error_docref(NULL, E_WARNING, "Not allowed to call handler '%s()'.", ZSTR_VAL(callable)); /* Push an empty string, so that we at least have an xslt result... */ valuePush(ctxt, xmlXPathNewString((xmlChar *)"")); } else { result = zend_call_function(&fci, NULL); if (result == SUCCESS && Z_TYPE(retval) != IS_UNDEF) { if (Z_TYPE(retval) == IS_OBJECT && instanceof_function(Z_OBJCE(retval), dom_node_class_entry)) { xmlNode *nodep; dom_object *obj; if (intern->node_list == NULL) { intern->node_list = zend_new_array(0); } Z_ADDREF(retval); zend_hash_next_index_insert(intern->node_list, &retval); obj = Z_DOMOBJ_P(&retval); nodep = dom_object_get_node(obj); valuePush(ctxt, xmlXPathNewNodeSet(nodep)); } else if (Z_TYPE(retval) == IS_FALSE || Z_TYPE(retval) == IS_TRUE) { valuePush(ctxt, xmlXPathNewBoolean(Z_TYPE(retval) == IS_TRUE)); } else if (Z_TYPE(retval) == IS_OBJECT) { php_error_docref(NULL, E_WARNING, "A PHP Object cannot be converted to a XPath-string"); valuePush(ctxt, xmlXPathNewString((xmlChar *)"")); } else { zend_string *str = zval_get_string(&retval); valuePush(ctxt, xmlXPathNewString((xmlChar *) ZSTR_VAL(str))); zend_string_release_ex(str, 0); } zval_ptr_dtor(&retval); } } zend_string_release_ex(callable, 0); zval_ptr_dtor_str(&fci.function_name); if (fci.param_count > 0) { for (i = 0; i < nargs - 1; i++) { zval_ptr_dtor(&fci.params[i]); } efree(fci.params); } } /* }}} */ static void dom_xpath_ext_function_string_php(xmlXPathParserContextPtr ctxt, int nargs) /* {{{ */ { dom_xpath_ext_function_php(ctxt, nargs, 1); } /* }}} */ static void dom_xpath_ext_function_object_php(xmlXPathParserContextPtr ctxt, int nargs) /* {{{ */ { dom_xpath_ext_function_php(ctxt, nargs, 2); } /* }}} */ /* {{{ proto DOMXPath::__construct(DOMDocument doc) U */ PHP_METHOD(domxpath, __construct) { zval *doc; xmlDocPtr docp = NULL; dom_object *docobj; dom_xpath_object *intern; xmlXPathContextPtr ctx, oldctx; if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O", &doc, dom_document_class_entry) == FAILURE) { return; } DOM_GET_OBJ(docp, doc, xmlDocPtr, docobj); ctx = xmlXPathNewContext(docp); if (ctx == NULL) { php_dom_throw_error(INVALID_STATE_ERR, 1); RETURN_FALSE; } intern = Z_XPATHOBJ_P(ZEND_THIS); if (intern != NULL) { oldctx = (xmlXPathContextPtr)intern->dom.ptr; if (oldctx != NULL) { php_libxml_decrement_doc_ref((php_libxml_node_object *) &intern->dom); xmlXPathFreeContext(oldctx); } xmlXPathRegisterFuncNS (ctx, (const xmlChar *) "functionString", (const xmlChar *) "http://php.net/xpath", dom_xpath_ext_function_string_php); xmlXPathRegisterFuncNS (ctx, (const xmlChar *) "function", (const xmlChar *) "http://php.net/xpath", dom_xpath_ext_function_object_php); intern->dom.ptr = ctx; ctx->userData = (void *)intern; intern->dom.document = docobj->document; php_libxml_increment_doc_ref((php_libxml_node_object *) &intern->dom, docp); } } /* }}} end DOMXPath::__construct */ /* {{{ document DOMDocument*/ int dom_xpath_document_read(dom_object *obj, zval *retval) { xmlDoc *docp = NULL; xmlXPathContextPtr ctx = (xmlXPathContextPtr) obj->ptr; if (ctx) { docp = (xmlDocPtr) ctx->doc; } php_dom_create_object((xmlNodePtr) docp, retval, obj); return SUCCESS; } /* }}} */ /* {{{ proto bool dom_xpath_register_ns(string prefix, string uri) */ PHP_FUNCTION(dom_xpath_register_ns) { zval *id; xmlXPathContextPtr ctxp; size_t prefix_len, ns_uri_len; dom_xpath_object *intern; unsigned char *prefix, *ns_uri; id = ZEND_THIS; if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) { return; } intern = Z_XPATHOBJ_P(id); ctxp = (xmlXPathContextPtr) intern->dom.ptr; if (ctxp == NULL) { php_error_docref(NULL, E_WARNING, "Invalid XPath Context"); RETURN_FALSE; } if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { RETURN_FALSE } RETURN_TRUE; } /* }}} */ static void dom_xpath_iter(zval *baseobj, dom_object *intern) /* {{{ */ { dom_nnodemap_object *mapptr = (dom_nnodemap_object *) intern->ptr; ZVAL_COPY_VALUE(&mapptr->baseobj_zv, baseobj); mapptr->nodetype = DOM_NODESET; } /* }}} */ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ { zval *id, retval, *context = NULL; xmlXPathContextPtr ctxp; xmlNodePtr nodep = NULL; xmlXPathObjectPtr xpathobjp; size_t expr_len, nsnbr = 0, xpath_type; dom_xpath_object *intern; dom_object *nodeobj; char *expr; xmlDoc *docp = NULL; xmlNsPtr *ns = NULL; zend_bool register_node_ns = 1; id = ZEND_THIS; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|O!b", &expr, &expr_len, &context, dom_node_class_entry, ®ister_node_ns) == FAILURE) { return; } intern = Z_XPATHOBJ_P(id); ctxp = (xmlXPathContextPtr) intern->dom.ptr; if (ctxp == NULL) { php_error_docref(NULL, E_WARNING, "Invalid XPath Context"); RETURN_FALSE; } docp = (xmlDocPtr) ctxp->doc; if (docp == NULL) { php_error_docref(NULL, E_WARNING, "Invalid XPath Document Pointer"); RETURN_FALSE; } if (context != NULL) { DOM_GET_OBJ(nodep, context, xmlNodePtr, nodeobj); } if (!nodep) { nodep = xmlDocGetRootElement(docp); } if (nodep && docp != nodep->doc) { php_error_docref(NULL, E_WARNING, "Node From Wrong Document"); RETURN_FALSE; } ctxp->node = nodep; if (register_node_ns) { /* Register namespaces in the node */ ns = xmlGetNsList(docp, nodep); if (ns != NULL) { while (ns[nsnbr] != NULL) nsnbr++; } } ctxp->namespaces = ns; ctxp->nsNr = nsnbr; xpathobjp = xmlXPathEvalExpression((xmlChar *) expr, ctxp); ctxp->node = NULL; if (ns != NULL) { xmlFree(ns); ctxp->namespaces = NULL; ctxp->nsNr = 0; } if (! xpathobjp) { RETURN_FALSE; } if (type == PHP_DOM_XPATH_QUERY) { xpath_type = XPATH_NODESET; } else { xpath_type = xpathobjp->type; } switch (xpath_type) { case XPATH_NODESET: { int i; xmlNodeSetPtr nodesetp; if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval) && nodesetp->nodeNr) { array_init(&retval); for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval child; if (node->type == XML_NAMESPACE_DECL) { xmlNsPtr curns; xmlNodePtr nsparent; nsparent = node->_private; curns = xmlNewNs(NULL, node->name, NULL); if (node->children) { curns->prefix = xmlStrdup((xmlChar *) node->children); } if (node->children) { node = xmlNewDocNode(docp, NULL, (xmlChar *) node->children, node->name); } else { node = xmlNewDocNode(docp, NULL, (xmlChar *) "xmlns", node->name); } node->type = XML_NAMESPACE_DECL; node->parent = nsparent; node->ns = curns; } php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&retval, &child); } } else { ZVAL_EMPTY_ARRAY(&retval); } php_dom_create_interator(return_value, DOM_NODELIST); nodeobj = Z_DOMOBJ_P(return_value); dom_xpath_iter(&retval, nodeobj); break; } case XPATH_BOOLEAN: RETVAL_BOOL(xpathobjp->boolval); break; case XPATH_NUMBER: RETVAL_DOUBLE(xpathobjp->floatval); break; case XPATH_STRING: RETVAL_STRING((char *) xpathobjp->stringval); break; default: RETVAL_NULL(); break; } xmlXPathFreeObject(xpathobjp); } /* }}} */ /* {{{ proto DOMNodeList dom_xpath_query(string expr [,DOMNode context [, bool registerNodeNS]]) */ PHP_FUNCTION(dom_xpath_query) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query */ /* {{{ proto mixed dom_xpath_evaluate(string expr [,DOMNode context [, bool registerNodeNS]]) */ PHP_FUNCTION(dom_xpath_evaluate) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate */ /* {{{ proto void dom_xpath_register_php_functions() */ PHP_FUNCTION(dom_xpath_register_php_functions) { zval *id; dom_xpath_object *intern; zval *array_value, *entry, new_string; zend_string *name; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "a", &array_value) == SUCCESS) { intern = Z_XPATHOBJ_P(id); ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(array_value), entry) { zend_string *str = zval_get_string(entry); ZVAL_LONG(&new_string,1); zend_hash_update(intern->registered_phpfunctions, str, &new_string); zend_string_release_ex(str, 0); } ZEND_HASH_FOREACH_END(); intern->registerPhpFunctions = 2; RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "S", &name) == SUCCESS) { intern = Z_XPATHOBJ_P(id); ZVAL_LONG(&new_string, 1); zend_hash_update(intern->registered_phpfunctions, name, &new_string); intern->registerPhpFunctions = 2; } else { intern = Z_XPATHOBJ_P(id); intern->registerPhpFunctions = 1; } } /* }}} end dom_xpath_register_php_functions */ #endif /* LIBXML_XPATH_ENABLED */ #endif