|
|
|
@ -48,6 +48,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_opcache_get_status, 0, 0, 0) |
|
|
|
ZEND_ARG_INFO(0, fetch_scripts) |
|
|
|
ZEND_END_ARG_INFO() |
|
|
|
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_opcache_compile_file, 0, 0, 1) |
|
|
|
ZEND_ARG_INFO(0, file) |
|
|
|
ZEND_END_ARG_INFO() |
|
|
|
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_opcache_invalidate, 0, 0, 1) |
|
|
|
ZEND_ARG_INFO(0, script) |
|
|
|
ZEND_ARG_INFO(0, force) |
|
|
|
@ -59,12 +63,14 @@ static ZEND_FUNCTION(opcache_invalidate); |
|
|
|
|
|
|
|
/* Private functions */ |
|
|
|
static ZEND_FUNCTION(opcache_get_status); |
|
|
|
static ZEND_FUNCTION(opcache_compile_file); |
|
|
|
static ZEND_FUNCTION(opcache_get_configuration); |
|
|
|
|
|
|
|
static zend_function_entry accel_functions[] = { |
|
|
|
/* User functions */ |
|
|
|
ZEND_FE(opcache_reset, arginfo_opcache_none) |
|
|
|
ZEND_FE(opcache_invalidate, arginfo_opcache_invalidate) |
|
|
|
ZEND_FE(opcache_compile_file, arginfo_opcache_compile_file) |
|
|
|
/* Private functions */ |
|
|
|
ZEND_FE(opcache_get_configuration, arginfo_opcache_none) |
|
|
|
ZEND_FE(opcache_get_status, arginfo_opcache_get_status) |
|
|
|
@ -709,3 +715,44 @@ static ZEND_FUNCTION(opcache_invalidate) |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static ZEND_FUNCTION(opcache_compile_file) |
|
|
|
{ |
|
|
|
char *script_name; |
|
|
|
int script_name_len; |
|
|
|
zend_file_handle handle; |
|
|
|
zend_op_array *op_array = NULL; |
|
|
|
zend_execute_data *orig_execute_data = NULL; |
|
|
|
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &script_name, &script_name_len) == FAILURE) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (!ZCG(enabled) || !accel_startup_ok || !ZCSG(accelerator_enabled)) { |
|
|
|
zend_error(E_NOTICE, ACCELERATOR_PRODUCT_NAME " seems to be disabled, can't compile file"); |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
handle.filename = script_name; |
|
|
|
handle.free_filename = 0; |
|
|
|
handle.opened_path = NULL; |
|
|
|
handle.type = ZEND_HANDLE_FILENAME; |
|
|
|
|
|
|
|
orig_execute_data = EG(current_execute_data); |
|
|
|
|
|
|
|
zend_try { |
|
|
|
op_array = persistent_compile_file(&handle, ZEND_INCLUDE TSRMLS_CC); |
|
|
|
} zend_catch { |
|
|
|
EG(current_execute_data) = orig_execute_data; |
|
|
|
zend_error(E_WARNING, ACCELERATOR_PRODUCT_NAME " could not compile file %s" TSRMLS_CC, handle.filename); |
|
|
|
} zend_end_try(); |
|
|
|
|
|
|
|
if(op_array != NULL) { |
|
|
|
destroy_op_array(op_array TSRMLS_CC); |
|
|
|
efree(op_array); |
|
|
|
RETVAL_TRUE; |
|
|
|
} else { |
|
|
|
RETVAL_FALSE; |
|
|
|
} |
|
|
|
zend_destroy_file_handle(&handle TSRMLS_CC); |
|
|
|
} |