1414#include <php_output.h>
1515#include <php_variables.h>
1616#include <php_version.h>
17+ #include <pthread.h>
18+ #include <sapi/embed/php_embed.h>
19+ #include <signal.h>
20+ #include <stdint.h>
21+ #include <stdio.h>
22+ #include <stdlib.h>
23+ #include <unistd.h>
24+ #if defined(__linux__ )
25+ #include <sys/prctl.h>
26+ #elif defined(__FreeBSD__ ) || defined(__OpenBSD__ )
27+ #include <pthread_np.h>
28+ #endif
29+
30+ typedef struct {
31+ char * script ;
32+ int argc ;
33+ char * * argv ;
34+ bool eval ;
35+ } cli_exec_args_t ;
36+ cli_exec_args_t * cli_args ;
37+
38+ /* Function declaration to avoid implicit declaration error */
39+ void register_server_variable_filtered (const char * key , char * * val , size_t * val_len , zval * track_vars_array );
1740
1841/*
1942 * CLI code is adapted from
@@ -71,7 +94,7 @@ static void cli_register_file_handles(bool no_close) /* {{{ */
7194
7295static void sapi_cli_register_variables (zval * track_vars_array ) /* {{{ */
7396{
74- size_t len = strlen (cli_script );
97+ size_t len = strlen (cli_args -> script );
7598 char * docroot = "" ;
7699
77100 /*
@@ -81,15 +104,15 @@ static void sapi_cli_register_variables(zval *track_vars_array) /* {{{ */
81104 php_import_environment_variables (track_vars_array );
82105
83106 /* Build the special-case PHP_SELF variable for the CLI version */
84- register_server_variable_filtered ("PHP_SELF" , & cli_script , & len ,
107+ register_server_variable_filtered ("PHP_SELF" , & cli_args -> script , & len ,
85108 track_vars_array );
86- register_server_variable_filtered ("SCRIPT_NAME" , & cli_script , & len ,
109+ register_server_variable_filtered ("SCRIPT_NAME" , & cli_args -> script , & len ,
87110 track_vars_array );
88111
89112 /* filenames are empty for stdin */
90- register_server_variable_filtered ("SCRIPT_FILENAME" , & cli_script , & len ,
113+ register_server_variable_filtered ("SCRIPT_FILENAME" , & cli_args -> script , & len ,
91114 track_vars_array );
92- register_server_variable_filtered ("PATH_TRANSLATED" , & cli_script , & len ,
115+ register_server_variable_filtered ("PATH_TRANSLATED" , & cli_args -> script , & len ,
93116 track_vars_array );
94117
95118 /* just make it available */
@@ -101,7 +124,9 @@ static void sapi_cli_register_variables(zval *track_vars_array) /* {{{ */
101124
102125void * emulate_script_cli (void * arg ) {
103126 void * exit_status ;
104- bool eval = (bool )arg ;
127+ cli_exec_args_t * args = arg ;
128+ cli_args = args ;
129+ bool eval = args -> eval ;
105130
106131 /*
107132 * The SAPI name "cli" is hardcoded into too many programs... let's usurp it.
@@ -110,16 +135,16 @@ void *emulate_script_cli(void *arg) {
110135 php_embed_module .pretty_name = "PHP CLI embedded in FrankenPHP" ;
111136 php_embed_module .register_server_variables = sapi_cli_register_variables ;
112137
113- php_embed_init (cli_argc , cli_argv );
138+ php_embed_init (cli_args -> argc , cli_args -> argv );
114139
115140 cli_register_file_handles (false);
116141 zend_first_try {
117142 if (eval ) {
118- /* evaluate the cli_script as literal PHP code (php-cli -r "...") */
119- zend_eval_string_ex (cli_script , NULL , "Command line code" , 1 );
143+ /* evaluate the cli_args->script as literal PHP code (php-cli -r "...") */
144+ zend_eval_string_ex (cli_args -> script , NULL , "Command line code" , 1 );
120145 } else {
121146 zend_file_handle file_handle ;
122- zend_stream_init_filename (& file_handle , cli_script );
147+ zend_stream_init_filename (& file_handle , cli_args -> script );
123148
124149 CG (skip_shebang ) = 1 ;
125150 php_execute_script (& file_handle );
0 commit comments