mirror of
https://github.com/php/php-src.git
synced 2026-04-29 11:13:36 +02:00
- Added xsl->setProfiling() for profiling stylesheets. (MFB)
This commit is contained in:
@@ -123,6 +123,7 @@ zend_object_value xsl_objects_new(zend_class_entry *class_type TSRMLS_DC)
|
||||
intern->registered_phpfunctions = NULL;
|
||||
intern->node_list = NULL;
|
||||
intern->doc = NULL;
|
||||
intern->profiling = NULL;
|
||||
|
||||
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
|
||||
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
|
||||
|
||||
@@ -60,6 +60,7 @@ typedef struct _xsl_object {
|
||||
HashTable *registered_phpfunctions;
|
||||
HashTable *node_list;
|
||||
php_libxml_node_object *doc;
|
||||
char *profiling;
|
||||
} xsl_object;
|
||||
|
||||
void php_xsl_set_object(zval *wrapper, void *obj TSRMLS_DC);
|
||||
|
||||
@@ -33,4 +33,5 @@ PHP_FUNCTION(xsl_xsltprocessor_get_parameter);
|
||||
PHP_FUNCTION(xsl_xsltprocessor_remove_parameter);
|
||||
PHP_FUNCTION(xsl_xsltprocessor_has_exslt_support);
|
||||
PHP_FUNCTION(xsl_xsltprocessor_register_php_functions);
|
||||
PHP_FUNCTION(xsl_xsltprocessor_set_profiling);
|
||||
#endif
|
||||
|
||||
+45
-2
@@ -44,6 +44,7 @@ const zend_function_entry php_xsl_xsltprocessor_class_functions[] = {
|
||||
PHP_FALIAS(removeParameter, xsl_xsltprocessor_remove_parameter, NULL)
|
||||
PHP_FALIAS(hasExsltSupport, xsl_xsltprocessor_has_exslt_support, NULL)
|
||||
PHP_FALIAS(registerPHPFunctions, xsl_xsltprocessor_register_php_functions, NULL)
|
||||
PHP_FALIAS(setProfiling, xsl_xsltprocessor_set_profiling, NULL)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -425,6 +426,7 @@ static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStyl
|
||||
int clone;
|
||||
zval *doXInclude, *member;
|
||||
zend_object_handlers *std_hnd;
|
||||
FILE *f;
|
||||
|
||||
node = php_libxml_import_node(docp TSRMLS_CC);
|
||||
|
||||
@@ -440,6 +442,17 @@ static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStyl
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No stylesheet associated to this object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (intern->profiling) {
|
||||
if (php_check_open_basedir(intern->profiling TSRMLS_CC)) {
|
||||
f = NULL;
|
||||
} else {
|
||||
f = VCWD_FOPEN(intern->profiling, "w");
|
||||
}
|
||||
} else {
|
||||
f = NULL;
|
||||
}
|
||||
|
||||
if (intern->parameter) {
|
||||
params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
|
||||
}
|
||||
@@ -470,8 +483,10 @@ static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStyl
|
||||
}
|
||||
efree(member);
|
||||
|
||||
newdocp = xsltApplyStylesheetUser(style, doc, (const char**) params, NULL, NULL, ctxt);
|
||||
|
||||
newdocp = xsltApplyStylesheetUser(style, doc, (const char**) params, NULL, f, ctxt);
|
||||
if (f) {
|
||||
fclose(f);
|
||||
}
|
||||
xsltFreeTransformContext(ctxt);
|
||||
|
||||
if (intern->node_list != NULL) {
|
||||
@@ -484,6 +499,9 @@ static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStyl
|
||||
efree(intern->doc);
|
||||
intern->doc = NULL;
|
||||
|
||||
if (intern->profiling) {
|
||||
efree(intern->profiling);
|
||||
}
|
||||
|
||||
if (params) {
|
||||
clone = 0;
|
||||
@@ -804,6 +822,31 @@ PHP_FUNCTION(xsl_xsltprocessor_register_php_functions)
|
||||
}
|
||||
/* }}} end xsl_xsltprocessor_register_php_functions(); */
|
||||
|
||||
/* {{{ proto bool xsl_xsltprocessor_set_profiling(string filename) */
|
||||
PHP_FUNCTION(xsl_xsltprocessor_set_profiling)
|
||||
{
|
||||
|
||||
zval *id;
|
||||
zval *array_value, **entry, *new_string;
|
||||
xsl_object *intern;
|
||||
char *filename;
|
||||
int filename_len;
|
||||
DOM_GET_THIS(id);
|
||||
|
||||
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == SUCCESS) {
|
||||
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
|
||||
|
||||
intern->profiling = estrndup(filename,filename_len);
|
||||
|
||||
RETURN_TRUE;
|
||||
|
||||
} else {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
}
|
||||
/* }}} end xsl_xsltprocessor_set_profiling */
|
||||
|
||||
/* {{{ proto bool xsl_xsltprocessor_has_exslt_support() U
|
||||
*/
|
||||
PHP_FUNCTION(xsl_xsltprocessor_has_exslt_support)
|
||||
|
||||
Reference in New Issue
Block a user