diff options
-rw-r--r-- | src/nxt_application.h | 7 | ||||
-rw-r--r-- | src/nxt_conf_validation.c | 15 | ||||
-rw-r--r-- | src/nxt_main_process.c | 6 | ||||
-rw-r--r-- | src/nxt_php_sapi.c | 26 |
4 files changed, 49 insertions, 5 deletions
diff --git a/src/nxt_application.h b/src/nxt_application.h index 96af1d67..0ddaeb7c 100644 --- a/src/nxt_application.h +++ b/src/nxt_application.h @@ -46,9 +46,10 @@ typedef struct { typedef struct { - char *root; - nxt_str_t script; - nxt_str_t index; + char *root; + nxt_str_t script; + nxt_str_t index; + nxt_conf_value_t *options; } nxt_php_app_conf_t; diff --git a/src/nxt_conf_validation.c b/src/nxt_conf_validation.c index cd5b576f..6cbd8f22 100644 --- a/src/nxt_conf_validation.c +++ b/src/nxt_conf_validation.c @@ -201,6 +201,16 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = { }; +static nxt_conf_vldt_object_t nxt_conf_vldt_php_options_members[] = { + { nxt_string("file"), + NXT_CONF_VLDT_STRING, + NULL, + NULL }, + + NXT_CONF_VLDT_END +}; + + static nxt_conf_vldt_object_t nxt_conf_vldt_php_members[] = { { nxt_string("root"), NXT_CONF_VLDT_STRING, @@ -217,6 +227,11 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_members[] = { NULL, NULL }, + { nxt_string("options"), + NXT_CONF_VLDT_OBJECT, + &nxt_conf_vldt_object, + (void *) &nxt_conf_vldt_php_options_members }, + NXT_CONF_VLDT_NEXT(&nxt_conf_vldt_common_members) }; diff --git a/src/nxt_main_process.c b/src/nxt_main_process.c index 032c05cd..e80034c4 100644 --- a/src/nxt_main_process.c +++ b/src/nxt_main_process.c @@ -169,6 +169,12 @@ static nxt_conf_map_t nxt_php_app_conf[] = { NXT_CONF_MAP_STR, offsetof(nxt_common_app_conf_t, u.php.index), }, + + { + nxt_string("options"), + NXT_CONF_MAP_PTR, + offsetof(nxt_common_app_conf_t, u.php.options), + }, }; diff --git a/src/nxt_php_sapi.c b/src/nxt_php_sapi.c index 5a4dfe64..f0a1d685 100644 --- a/src/nxt_php_sapi.c +++ b/src/nxt_php_sapi.c @@ -97,7 +97,7 @@ static sapi_module_struct nxt_php_sapi_module = 0, /* php_ini_ignore */ #ifdef NXT_HAVE_PHP_IGNORE_CWD - 0, /* php_ini_ignore_cwd */ + 1, /* php_ini_ignore_cwd */ #endif NULL, /* get_fd */ @@ -184,10 +184,13 @@ static nxt_int_t nxt_php_init(nxt_task_t *task, nxt_common_app_conf_t *conf) { u_char *p; - nxt_str_t rpath; + nxt_str_t rpath, ini_path; nxt_str_t *root, *path, *script, *index; + nxt_conf_value_t *value; nxt_php_app_conf_t *c; + static nxt_str_t file_str = nxt_string("file"); + c = &conf->u.php; if (c->root == NULL) { @@ -271,6 +274,25 @@ nxt_php_init(nxt_task_t *task, nxt_common_app_conf_t *conf) } sapi_startup(&nxt_php_sapi_module); + + if (c->options != NULL) { + value = nxt_conf_get_object_member(c->options, &file_str, NULL); + + if (value != NULL) { + nxt_conf_get_string(value, &ini_path); + + p = nxt_malloc(ini_path.length + 1); + if (nxt_slow_path(p == NULL)) { + return NXT_ERROR; + } + + nxt_php_sapi_module.php_ini_path_override = (char *) p; + + p = nxt_cpymem(p, ini_path.start, ini_path.length); + *p = '\0'; + } + } + nxt_php_startup(&nxt_php_sapi_module); return NXT_OK; |