diff --git a/sapi/fpm/fpm/fpm.h b/sapi/fpm/fpm/fpm.h index ba439044810..626afbe0e9e 100644 --- a/sapi/fpm/fpm/fpm.h +++ b/sapi/fpm/fpm/fpm.h @@ -23,6 +23,7 @@ struct fpm_globals_s { int listening_socket; /* for this child */ int max_requests; /* for this child */ int is_child; + int test_conf; }; extern struct fpm_globals_s fpm_globals; diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c index 54c04a4aac6..296f669b64a 100644 --- a/sapi/fpm/fpm/fpm_conf.c +++ b/sapi/fpm/fpm/fpm_conf.c @@ -1028,13 +1028,20 @@ int fpm_conf_init_main() /* {{{ */ return -1; } - if (free) efree(filename); - if (0 > fpm_conf_post_process()) { zlog(ZLOG_ERROR, "failed to post process the configuration"); + if (free) efree(filename); return -1; } + if (fpm_globals.test_conf) { + zlog(ZLOG_NOTICE, "configuration file %s test is successful\n", filename); + if (free) efree(filename); + return -1; + } + + if (free) efree(filename); + if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_conf_cleanup, 0)) { return -1; } diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 81c494c4a3d..8086a7bdfd7 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -152,6 +152,7 @@ static const opt_struct OPTIONS[] = { {'?', 0, "usage"},/* help alias (both '?' and 'usage') */ {'v', 0, "version"}, {'y', 1, "fpm-config"}, + {'t', 0, "test"}, {'-', 0, NULL} /* end of args */ }; @@ -957,7 +958,7 @@ static void php_cgi_usage(char *argv0) prog = "php"; } - php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-c ] [-d foo[=bar]] [-y ]\n" + php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-c ] [-d foo[=bar]] [-y ]\n" " -c | Look for php.ini file in this directory\n" " -n No php.ini file will be used\n" " -d foo[=bar] Define INI entry foo with value 'bar'\n" @@ -967,7 +968,8 @@ static void php_cgi_usage(char *argv0) " -m Show compiled in modules\n" " -v Version number\n" " -y, --fpm-config \n" - " Specify alternative path to FastCGI process manager config file.\n", + " Specify alternative path to FastCGI process manager config file.\n" + " -t, --test Test FPM configuration and exit\n", prog); } /* }}} */ @@ -1625,6 +1627,10 @@ int main(int argc, char *argv[]) CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO; break; + case 't': + fpm_globals.test_conf = 1; + break; + case 'm': /* list compiled in modules */ cgi_sapi_module.startup(&cgi_sapi_module); php_output_activate(TSRMLS_C); diff --git a/sapi/fpm/php-fpm.8.in b/sapi/fpm/php-fpm.8.in index e91aff8605e..1aa8b62b95e 100644 --- a/sapi/fpm/php-fpm.8.in +++ b/sapi/fpm/php-fpm.8.in @@ -86,6 +86,13 @@ Version number Specify alternative path to FastCGI process manager configuration file (the default is @php_fpm_sysconfdir@/php-fpm.conf) .TP .PD 0 +.B \-\-test +.TP +.PD 1 +.B \-t +Test FPM configuration file and exit +.TP +.PD 0 .B \-\-zend\-extension \fIfile\fP .TP .PD 1