diff options
-rw-r--r-- | main/SAPI.h | 4 | ||||
-rw-r--r-- | main/main.c | 24 |
2 files changed, 26 insertions, 2 deletions
diff --git a/main/SAPI.h b/main/SAPI.h index b8748d0c19..9ca41da77b 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -97,6 +97,10 @@ typedef struct { /* this is necessary for Safe Mode */ char *current_user; int current_user_length; + + /* this is necessary for CLI module */ + int argc; + char **argv; } sapi_request_info; diff --git a/main/main.c b/main/main.c index a6b7bb107e..a4a44ac187 100644 --- a/main/main.c +++ b/main/main.c @@ -861,6 +861,8 @@ int php_module_startup(sapi_module_struct *sf) PG(header_is_being_sent) = 0; SG(request_info).headers_only = 0; SG(request_info).argv0 = NULL; + SG(request_info).argc=0; + SG(request_info).argv=(char **)NULL; PG(connection_status) = PHP_CONNECTION_NORMAL; PG(during_request_startup) = 0; @@ -1195,7 +1197,21 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC) INIT_PZVAL(arr); /* Prepare argv */ - if (s && *s) { + if (SG(request_info).argc) { /* are we in cli sapi? */ + int i; + for (i=0; i<SG(request_info).argc; i++) { + ALLOC_ZVAL(tmp); + Z_TYPE_P(tmp) = IS_STRING; + Z_STRLEN_P(tmp) = strlen(SG(request_info).argv[i]); + Z_STRVAL_P(tmp) = estrndup(SG(request_info).argv[i], Z_STRLEN_P(tmp)); + INIT_PZVAL(tmp); + if (zend_hash_next_index_insert(Z_ARRVAL_P(arr), &tmp, sizeof(pval *), NULL)==FAILURE) { + if (Z_TYPE_P(tmp) == IS_STRING) { + efree(Z_STRVAL_P(tmp)); + } + } + } + } else if (s && *s) { ss = s; while (ss) { space = strchr(ss, '+'); @@ -1225,7 +1241,11 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC) /* prepare argc */ ALLOC_ZVAL(argc); - Z_LVAL_P(argc) = count; + if (SG(request_info).argc) { + Z_LVAL_P(argc) = SG(request_info).argc; + } else { + Z_LVAL_P(argc) = count; + } Z_TYPE_P(argc) = IS_LONG; INIT_PZVAL(argc); |