From 36d87a3840cbbdec60e429a7162153c33455040b Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Thu, 20 Feb 2025 22:51:08 +0000 Subject: [PATCH 1/5] Call opcache_reset PHP function directly --- frankenphp.c | 9 ++++----- frankenphp.h | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/frankenphp.c b/frankenphp.c index f9be7a5a22..8778997a33 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -1180,12 +1180,11 @@ int frankenphp_execute_php_function(const char *php_function) { return success; } -int frankenphp_reset_opcache(void) { - if (zend_hash_str_exists(CG(function_table), "opcache_reset", - sizeof("opcache_reset") - 1)) { - return frankenphp_execute_php_function("opcache_reset"); +void frankenphp_reset_opcache(void) { + zend_function *opcache_reset = zend_hash_str_find_ptr(CG(function_table), ZEND_STRL("opcache_reset")); + if (opcache_reset) { + zend_call_known_function(opcache_reset, NULL, NULL, NULL, 0, NULL, NULL); } - return 0; } int frankenphp_get_current_memory_limit() { return PG(memory_limit); } diff --git a/frankenphp.h b/frankenphp.h index d47adb47b3..217d5391ee 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -73,6 +73,8 @@ void frankenphp_register_variable_safe(char *key, char *var, size_t val_len, zval *track_vars_array); zend_string *frankenphp_init_persistent_string(const char *string, size_t len); int frankenphp_reset_opcache(void); +void frankenphp_release_zend_string(zend_string *z_string); +void frankenphp_reset_opcache(void); int frankenphp_get_current_memory_limit(); void frankenphp_add_assoc_str_ex(zval *track_vars_array, char *key, size_t keylen, zend_string *val); From 6ae074bd27c0a673341400a81451898cbff3aea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sat, 22 Mar 2025 13:22:43 +0100 Subject: [PATCH 2/5] prevent warning --- frankenphp.c | 4 +++- frankenphp.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/frankenphp.c b/frankenphp.c index 8778997a33..ce636a4484 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -1180,11 +1180,13 @@ int frankenphp_execute_php_function(const char *php_function) { return success; } -void frankenphp_reset_opcache(void) { +int frankenphp_reset_opcache(void) { zend_function *opcache_reset = zend_hash_str_find_ptr(CG(function_table), ZEND_STRL("opcache_reset")); if (opcache_reset) { zend_call_known_function(opcache_reset, NULL, NULL, NULL, 0, NULL, NULL); } + + return 0; } int frankenphp_get_current_memory_limit() { return PG(memory_limit); } diff --git a/frankenphp.h b/frankenphp.h index 217d5391ee..268334b0fc 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -74,7 +74,6 @@ void frankenphp_register_variable_safe(char *key, char *var, size_t val_len, zend_string *frankenphp_init_persistent_string(const char *string, size_t len); int frankenphp_reset_opcache(void); void frankenphp_release_zend_string(zend_string *z_string); -void frankenphp_reset_opcache(void); int frankenphp_get_current_memory_limit(); void frankenphp_add_assoc_str_ex(zval *track_vars_array, char *key, size_t keylen, zend_string *val); From 63153fe674d4f574ac05b2a5e29031058710b063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sat, 22 Mar 2025 13:23:55 +0100 Subject: [PATCH 3/5] cleanup --- frankenphp.h | 1 - 1 file changed, 1 deletion(-) diff --git a/frankenphp.h b/frankenphp.h index 268334b0fc..d47adb47b3 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -73,7 +73,6 @@ void frankenphp_register_variable_safe(char *key, char *var, size_t val_len, zval *track_vars_array); zend_string *frankenphp_init_persistent_string(const char *string, size_t len); int frankenphp_reset_opcache(void); -void frankenphp_release_zend_string(zend_string *z_string); int frankenphp_get_current_memory_limit(); void frankenphp_add_assoc_str_ex(zval *track_vars_array, char *key, size_t keylen, zend_string *val); From f19737a35a0044b2f7e1839a8eb10f0d35360b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sat, 22 Mar 2025 13:26:19 +0100 Subject: [PATCH 4/5] remove frankenphp_execute_php_function --- frankenphp.c | 19 ------------------- frankenphp.go | 7 ------- frankenphp.h | 2 -- 3 files changed, 28 deletions(-) diff --git a/frankenphp.c b/frankenphp.c index ce636a4484..98763a0b6f 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -1161,25 +1161,6 @@ int frankenphp_execute_script_cli(char *script, int argc, char **argv) { return (intptr_t)exit_status; } -int frankenphp_execute_php_function(const char *php_function) { - zval retval = {0}; - zend_fcall_info fci = {0}; - zend_fcall_info_cache fci_cache = {0}; - zend_string *func_name = - zend_string_init(php_function, strlen(php_function), 0); - ZVAL_STR(&fci.function_name, func_name); - fci.size = sizeof fci; - fci.retval = &retval; - int success = 0; - - zend_try { success = zend_call_function(&fci, &fci_cache) == SUCCESS; } - zend_end_try(); - - zend_string_release(func_name); - - return success; -} - int frankenphp_reset_opcache(void) { zend_function *opcache_reset = zend_hash_str_find_ptr(CG(function_table), ZEND_STRL("opcache_reset")); if (opcache_reset) { diff --git a/frankenphp.go b/frankenphp.go index 57d4a7cb3c..17caea1c9b 100644 --- a/frankenphp.go +++ b/frankenphp.go @@ -653,13 +653,6 @@ func freeArgs(argv []*C.char) { } } -func executePHPFunction(functionName string) bool { - cFunctionName := C.CString(functionName) - defer C.free(unsafe.Pointer(cFunctionName)) - - return C.frankenphp_execute_php_function(cFunctionName) == 1 -} - func timeoutChan(timeout time.Duration) <-chan time.Time { if timeout == 0 { return nil diff --git a/frankenphp.h b/frankenphp.h index d47adb47b3..7839bcf7e0 100644 --- a/frankenphp.h +++ b/frankenphp.h @@ -63,8 +63,6 @@ int frankenphp_execute_script(char *file_name); int frankenphp_execute_script_cli(char *script, int argc, char **argv); -int frankenphp_execute_php_function(const char *php_function); - void frankenphp_register_variables_from_request_info( zval *track_vars_array, zend_string *content_type, zend_string *path_translated, zend_string *query_string, From 0388db0398b0fe55ed1afdb1f49952dc86cf6e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 24 Mar 2025 10:17:46 +0100 Subject: [PATCH 5/5] cs --- frankenphp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frankenphp.c b/frankenphp.c index 98763a0b6f..1c67d2b640 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -1162,7 +1162,8 @@ int frankenphp_execute_script_cli(char *script, int argc, char **argv) { } int frankenphp_reset_opcache(void) { - zend_function *opcache_reset = zend_hash_str_find_ptr(CG(function_table), ZEND_STRL("opcache_reset")); + zend_function *opcache_reset = + zend_hash_str_find_ptr(CG(function_table), ZEND_STRL("opcache_reset")); if (opcache_reset) { zend_call_known_function(opcache_reset, NULL, NULL, NULL, 0, NULL, NULL); }