52
52
static char *fpm_conf_set_rlimit_core(zval *value, void **config, intptr_t offset);
53
53
static char *fpm_conf_set_pm(zval *value, void **config, intptr_t offset);
55
struct fpm_global_config_s fpm_global_config = { 0, 0, 0, 1, NULL, NULL};
55
struct fpm_global_config_s fpm_global_config = { .daemonize = 1 };
56
56
static struct fpm_worker_pool_s *current_wp = NULL;
57
57
static int ini_recursion = 0;
58
58
static char *ini_filename = NULL;
59
59
static int ini_lineno = 0;
60
60
static char *ini_include = NULL;
62
#define GO(field) offsetof(struct fpm_global_config_s, field)
63
#define WPO(field) offsetof(struct fpm_worker_pool_config_s, field)
62
65
static struct ini_value_parser_s ini_fpm_global_options[] = {
63
{ "emergency_restart_threshold", &fpm_conf_set_integer, offsetof(struct fpm_global_config_s, emergency_restart_threshold) },
64
{ "emergency_restart_interval", &fpm_conf_set_time, offsetof(struct fpm_global_config_s, emergency_restart_interval) },
65
{ "process_control_timeout", &fpm_conf_set_time, offsetof(struct fpm_global_config_s, process_control_timeout) },
66
{ "daemonize", &fpm_conf_set_boolean, offsetof(struct fpm_global_config_s, daemonize) },
67
{ "pid", &fpm_conf_set_string, offsetof(struct fpm_global_config_s, pid_file) },
68
{ "error_log", &fpm_conf_set_string, offsetof(struct fpm_global_config_s, error_log) },
66
{ "emergency_restart_threshold", &fpm_conf_set_integer, GO(emergency_restart_threshold) },
67
{ "emergency_restart_interval", &fpm_conf_set_time, GO(emergency_restart_interval) },
68
{ "process_control_timeout", &fpm_conf_set_time, GO(process_control_timeout) },
69
{ "daemonize", &fpm_conf_set_boolean, GO(daemonize) },
70
{ "pid", &fpm_conf_set_string, GO(pid_file) },
71
{ "error_log", &fpm_conf_set_string, GO(error_log) },
69
72
{ "log_level", &fpm_conf_set_log_level, 0 },
73
76
static struct ini_value_parser_s ini_fpm_pool_options[] = {
74
{ "user", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, user) },
75
{ "group", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, group) },
76
{ "chroot", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, chroot) },
77
{ "chdir", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, chdir) },
78
{ "request_terminate_timeout", &fpm_conf_set_time, offsetof(struct fpm_worker_pool_config_s, request_terminate_timeout) },
79
{ "request_slowlog_timeout", &fpm_conf_set_time, offsetof(struct fpm_worker_pool_config_s, request_slowlog_timeout) },
80
{ "slowlog", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, slowlog) },
81
{ "rlimit_files", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, rlimit_files) },
82
{ "rlimit_core", &fpm_conf_set_rlimit_core, offsetof(struct fpm_worker_pool_config_s, rlimit_core) },
83
{ "catch_workers_output", &fpm_conf_set_boolean, offsetof(struct fpm_worker_pool_config_s, catch_workers_output) },
84
{ "listen", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, listen_address) },
85
{ "listen.owner", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, listen_owner) },
86
{ "listen.group", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, listen_group) },
87
{ "listen.mode", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, listen_mode) },
88
{ "listen.backlog", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, listen_backlog) },
89
{ "listen.allowed_clients", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, listen_allowed_clients) },
90
{ "pm", &fpm_conf_set_pm, offsetof(struct fpm_worker_pool_config_s, pm) },
91
{ "pm.max_requests", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, pm_max_requests) },
92
{ "pm.max_children", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, pm_max_children) },
93
{ "pm.start_servers", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, pm_start_servers) },
94
{ "pm.min_spare_servers", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, pm_min_spare_servers) },
95
{ "pm.max_spare_servers", &fpm_conf_set_integer, offsetof(struct fpm_worker_pool_config_s, pm_max_spare_servers) },
96
{ "pm.status_path", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, pm_status_path) },
97
{ "ping.path", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, ping_path) },
98
{ "ping.response", &fpm_conf_set_string, offsetof(struct fpm_worker_pool_config_s, ping_response) },
77
{ "prefix", &fpm_conf_set_string, WPO(prefix) },
78
{ "user", &fpm_conf_set_string, WPO(user) },
79
{ "group", &fpm_conf_set_string, WPO(group) },
80
{ "chroot", &fpm_conf_set_string, WPO(chroot) },
81
{ "chdir", &fpm_conf_set_string, WPO(chdir) },
82
{ "request_terminate_timeout", &fpm_conf_set_time, WPO(request_terminate_timeout) },
83
{ "request_slowlog_timeout", &fpm_conf_set_time, WPO(request_slowlog_timeout) },
84
{ "slowlog", &fpm_conf_set_string, WPO(slowlog) },
85
{ "rlimit_files", &fpm_conf_set_integer, WPO(rlimit_files) },
86
{ "rlimit_core", &fpm_conf_set_rlimit_core, WPO(rlimit_core) },
87
{ "catch_workers_output", &fpm_conf_set_boolean, WPO(catch_workers_output) },
88
{ "listen", &fpm_conf_set_string, WPO(listen_address) },
89
{ "listen.owner", &fpm_conf_set_string, WPO(listen_owner) },
90
{ "listen.group", &fpm_conf_set_string, WPO(listen_group) },
91
{ "listen.mode", &fpm_conf_set_string, WPO(listen_mode) },
92
{ "listen.backlog", &fpm_conf_set_integer, WPO(listen_backlog) },
93
{ "listen.allowed_clients", &fpm_conf_set_string, WPO(listen_allowed_clients) },
94
{ "pm", &fpm_conf_set_pm, WPO(pm) },
95
{ "pm.max_requests", &fpm_conf_set_integer, WPO(pm_max_requests) },
96
{ "pm.max_children", &fpm_conf_set_integer, WPO(pm_max_children) },
97
{ "pm.start_servers", &fpm_conf_set_integer, WPO(pm_start_servers) },
98
{ "pm.min_spare_servers", &fpm_conf_set_integer, WPO(pm_min_spare_servers) },
99
{ "pm.max_spare_servers", &fpm_conf_set_integer, WPO(pm_max_spare_servers) },
100
{ "pm.status_path", &fpm_conf_set_string, WPO(pm_status_path) },
101
{ "ping.path", &fpm_conf_set_string, WPO(ping_path) },
102
{ "ping.response", &fpm_conf_set_string, WPO(ping_response) },
408
482
struct fpm_worker_pool_s *wp;
410
484
if (!fpm_worker_all_pools) {
411
zlog(ZLOG_STUFF, ZLOG_ERROR, "at least one pool section must be specified in config file");
485
zlog(ZLOG_ERROR, "at least one pool section must be specified in config file");
415
489
for (wp = fpm_worker_all_pools; wp; wp = wp->next) {
491
if (wp->config->prefix && *wp->config->prefix) {
492
fpm_evaluate_full_path(&wp->config->prefix, NULL, NULL, 0);
494
if (!fpm_conf_is_dir(wp->config->prefix)) {
495
zlog(ZLOG_ERROR, "[pool %s] the prefix '%s' does not exist or is not a directory", wp->config->name, wp->config->prefix);
417
500
if (wp->config->listen_address && *wp->config->listen_address) {
418
501
wp->listen_address_domain = fpm_sockets_domain_from_address(wp->config->listen_address);
420
503
if (wp->listen_address_domain == FPM_AF_UNIX && *wp->config->listen_address != '/') {
421
fpm_evaluate_full_path(&wp->config->listen_address);
504
fpm_evaluate_full_path(&wp->config->listen_address, wp, NULL, 0);
424
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] no listen address have been defined!", wp->config->name);
507
zlog(ZLOG_ALERT, "[pool %s] no listen address have been defined!", wp->config->name);
428
511
if (!wp->config->user) {
429
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] user has not been defined", wp->config->name);
512
zlog(ZLOG_ALERT, "[pool %s] user has not been defined", wp->config->name);
433
516
if (wp->config->pm != PM_STYLE_STATIC && wp->config->pm != PM_STYLE_DYNAMIC) {
434
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] the process manager is missing (static or dynamic)", wp->config->name);
517
zlog(ZLOG_ALERT, "[pool %s] the process manager is missing (static or dynamic)", wp->config->name);
438
521
if (wp->config->pm_max_children < 1) {
439
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.max_children must be a positive value", wp->config->name);
522
zlog(ZLOG_ALERT, "[pool %s] pm.max_children must be a positive value", wp->config->name);
444
527
struct fpm_worker_pool_config_s *config = wp->config;
446
529
if (config->pm_min_spare_servers <= 0) {
447
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.min_spare_servers(%d) must be a positive value", wp->config->name, config->pm_min_spare_servers);
530
zlog(ZLOG_ALERT, "[pool %s] pm.min_spare_servers(%d) must be a positive value", wp->config->name, config->pm_min_spare_servers);
451
534
if (config->pm_max_spare_servers <= 0) {
452
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.max_spare_servers(%d) must be a positive value", wp->config->name, config->pm_max_spare_servers);
535
zlog(ZLOG_ALERT, "[pool %s] pm.max_spare_servers(%d) must be a positive value", wp->config->name, config->pm_max_spare_servers);
456
539
if (config->pm_min_spare_servers > config->pm_max_children ||
457
540
config->pm_max_spare_servers > config->pm_max_children) {
458
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.min_spare_servers(%d) and pm.max_spare_servers(%d) cannot be greater than pm.max_children(%d)",
541
zlog(ZLOG_ALERT, "[pool %s] pm.min_spare_servers(%d) and pm.max_spare_servers(%d) cannot be greater than pm.max_children(%d)",
459
542
wp->config->name, config->pm_min_spare_servers, config->pm_max_spare_servers, config->pm_max_children);
463
546
if (config->pm_max_spare_servers < config->pm_min_spare_servers) {
464
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.max_spare_servers(%d) must not be less than pm.min_spare_servers(%d)", wp->config->name, config->pm_max_spare_servers, config->pm_min_spare_servers);
547
zlog(ZLOG_ALERT, "[pool %s] pm.max_spare_servers(%d) must not be less than pm.min_spare_servers(%d)", wp->config->name, config->pm_max_spare_servers, config->pm_min_spare_servers);
468
551
if (config->pm_start_servers <= 0) {
469
552
config->pm_start_servers = config->pm_min_spare_servers + ((config->pm_max_spare_servers - config->pm_min_spare_servers) / 2);
470
zlog(ZLOG_STUFF, ZLOG_WARNING, "[pool %s] pm.start_servers is not set. It's been set to %d.", wp->config->name, config->pm_start_servers);
553
zlog(ZLOG_WARNING, "[pool %s] pm.start_servers is not set. It's been set to %d.", wp->config->name, config->pm_start_servers);
471
554
} else if (config->pm_start_servers < config->pm_min_spare_servers || config->pm_start_servers > config->pm_max_spare_servers) {
472
zlog(ZLOG_STUFF, ZLOG_ALERT, "[pool %s] pm.start_servers(%d) must not be less than pm.min_spare_servers(%d) and not greater than pm.max_spare_servers(%d)", wp->config->name, config->pm_start_servers, config->pm_min_spare_servers, config->pm_max_spare_servers);
555
zlog(ZLOG_ALERT, "[pool %s] pm.start_servers(%d) must not be less than pm.min_spare_servers(%d) and not greater than pm.max_spare_servers(%d)", wp->config->name, config->pm_start_servers, config->pm_min_spare_servers, config->pm_max_spare_servers);
561
if (wp->config->slowlog && *wp->config->slowlog) {
562
fpm_evaluate_full_path(&wp->config->slowlog, wp, NULL, 0);
479
565
if (wp->config->request_slowlog_timeout) {
480
566
#if HAVE_FPM_TRACE
481
567
if (! (wp->config->slowlog && *wp->config->slowlog)) {
482
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] 'slowlog' must be specified for use with 'request_slowlog_timeout'", wp->config->name);
568
zlog(ZLOG_ERROR, "[pool %s] 'slowlog' must be specified for use with 'request_slowlog_timeout'", wp->config->name);
486
572
static int warned = 0;
489
zlog(ZLOG_STUFF, ZLOG_WARNING, "[pool %s] 'request_slowlog_timeout' is not supported on your system", wp->config->name);
575
zlog(ZLOG_WARNING, "[pool %s] 'request_slowlog_timeout' is not supported on your system", wp->config->name);
493
579
wp->config->request_slowlog_timeout = 0;
497
if (wp->config->request_slowlog_timeout && wp->config->slowlog && *wp->config->slowlog) {
500
fpm_evaluate_full_path(&wp->config->slowlog);
502
if (wp->config->request_slowlog_timeout) {
582
if (wp->config->slowlog && *wp->config->slowlog) {
503
585
fd = open(wp->config->slowlog, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
506
zlog(ZLOG_STUFF, ZLOG_SYSERROR, "open(%s) failed", wp->config->slowlog);
588
zlog(ZLOG_SYSERROR, "open(%s) failed", wp->config->slowlog);
552
634
/* struct fpm_status_s fpm_status; */
554
636
if (*status != '/') {
555
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the status path '%s' must start with a '/'", wp->config->name, status);
637
zlog(ZLOG_ERROR, "[pool %s] the status path '%s' must start with a '/'", wp->config->name, status);
559
641
if (strlen(status) < 2) {
560
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the status path '%s' is not long enough", wp->config->name, status);
642
zlog(ZLOG_ERROR, "[pool %s] the status path '%s' is not long enough", wp->config->name, status);
564
646
for (i=0; i<strlen(status); i++) {
565
647
if (!isalnum(status[i]) && status[i] != '/' && status[i] != '-' && status[i] != '_' && status[i] != '.') {
566
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the status path '%s' must contain only the following characters '[alphanum]/_-.'", wp->config->name, status);
648
zlog(ZLOG_ERROR, "[pool %s] the status path '%s' must contain only the following characters '[alphanum]/_-.'", wp->config->name, status);
570
652
wp->shm_status = fpm_shm_alloc(sizeof(struct fpm_status_s));
571
653
if (!wp->shm_status) {
572
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] unable to allocate shared memory for status page '%s'", wp->config->name, status);
654
zlog(ZLOG_ERROR, "[pool %s] unable to allocate shared memory for status page '%s'", wp->config->name, status);
575
657
fpm_status_update_accepted_conn(wp->shm_status, 0);
576
fpm_status_update_activity(wp->shm_status, -1, -1, -1, 1);
658
fpm_status_update_activity(wp->shm_status, -1, -1, -1, 0, -1, 1);
659
fpm_status_update_max_children_reached(wp->shm_status, 0);
577
660
fpm_status_set_pm(wp->shm_status, wp->config->pm);
578
661
/* memset(&fpm_status.last_update, 0, sizeof(fpm_status.last_update)); */
581
664
if (wp->config->chroot && *wp->config->chroot) {
666
fpm_evaluate_full_path(&wp->config->chroot, wp, NULL, 1);
582
668
if (*wp->config->chroot != '/') {
583
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the chroot path '%s' must start with a '/'", wp->config->name, wp->config->chroot);
669
zlog(ZLOG_ERROR, "[pool %s] the chroot path '%s' must start with a '/'", wp->config->name, wp->config->chroot);
586
672
if (!fpm_conf_is_dir(wp->config->chroot)) {
587
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the chroot path '%s' does not exist or is not a directory", wp->config->name, wp->config->chroot);
673
zlog(ZLOG_ERROR, "[pool %s] the chroot path '%s' does not exist or is not a directory", wp->config->name, wp->config->chroot);
592
678
if (wp->config->chdir && *wp->config->chdir) {
680
fpm_evaluate_full_path(&wp->config->chdir, wp, NULL, 0);
593
682
if (*wp->config->chdir != '/') {
594
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the chdir path '%s' must start with a '/'", wp->config->name, wp->config->chdir);
683
zlog(ZLOG_ERROR, "[pool %s] the chdir path '%s' must start with a '/'", wp->config->name, wp->config->chdir);
598
687
if (wp->config->chroot) {
602
len = strlen(wp->config->chroot) + strlen(wp->config->chdir) + 1;
603
buf = malloc(sizeof(char) * len);
605
zlog(ZLOG_STUFF, ZLOG_SYSERROR, "[pool %s] malloc() failed", wp->config->name);
608
snprintf(buf, len, "%s%s", wp->config->chroot, wp->config->chdir);
690
spprintf(&buf, 0, "%s/%s", wp->config->chroot, wp->config->chdir);
609
692
if (!fpm_conf_is_dir(buf)) {
610
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the chdir path '%s' within the chroot path '%s' ('%s') does not exist or is not a directory", wp->config->name, wp->config->chdir, wp->config->chroot, buf);
693
zlog(ZLOG_ERROR, "[pool %s] the chdir path '%s' within the chroot path '%s' ('%s') does not exist or is not a directory", wp->config->name, wp->config->chdir, wp->config->chroot, buf);
616
700
if (!fpm_conf_is_dir(wp->config->chdir)) {
617
zlog(ZLOG_STUFF, ZLOG_ERROR, "[pool %s] the chdir path '%s' does not exist or is not a directory", wp->config->name, wp->config->chdir);
701
zlog(ZLOG_ERROR, "[pool %s] the chdir path '%s' does not exist or is not a directory", wp->config->name, wp->config->chdir);
706
if (!wp->config->chroot) {
707
struct key_value_s *kv;
708
char *options[] = FPM_PHP_INI_TO_EXPAND;
711
for (kv = wp->config->php_values; kv; kv = kv->next) {
712
for (p=options; *p; p++) {
713
if (!strcasecmp(kv->key, *p)) {
714
fpm_evaluate_full_path(&kv->value, wp, NULL, 0);
718
for (kv = wp->config->php_admin_values; kv; kv = kv->next) {
719
for (p=options; *p; p++) {
720
if (!strcasecmp(kv->key, *p)) {
721
fpm_evaluate_full_path(&kv->value, wp, NULL, 0);
846
953
char *err = NULL;
849
if (!Z_STRVAL_P(key) || !Z_STRVAL_P(value) || !*Z_STRVAL_P(key) || !*Z_STRVAL_P(value)) {
850
zlog(ZLOG_STUFF, ZLOG_ERROR, "[%s:%d] Mispell array ?", ini_filename, ini_lineno);
956
if (!Z_STRVAL_P(key) || !Z_STRVAL_P(value) || !*Z_STRVAL_P(key)) {
957
zlog(ZLOG_ERROR, "[%s:%d] Misspelled array ?", ini_filename, ini_lineno);
854
961
if (!current_wp || !current_wp->config) {
855
zlog(ZLOG_STUFF, ZLOG_ERROR, "[%s:%d] Array are not allowed in the global section", ini_filename, ini_lineno);
962
zlog(ZLOG_ERROR, "[%s:%d] Array are not allowed in the global section", ini_filename, ini_lineno);
860
967
if (!strcmp("env", Z_STRVAL_P(name))) {
861
config = (char *)current_wp->config + offsetof(struct fpm_worker_pool_config_s, env);
968
if (!*Z_STRVAL_P(value)) {
969
zlog(ZLOG_ERROR, "[%s:%d] empty value", ini_filename, ini_lineno);
973
config = (char *)current_wp->config + WPO(env);
862
974
err = fpm_conf_set_array(key, value, &config, 0);
864
976
} else if (!strcmp("php_value", Z_STRVAL_P(name))) {
865
config = (char *)current_wp->config + offsetof(struct fpm_worker_pool_config_s, php_values);
977
if (!*Z_STRVAL_P(value)) {
978
zlog(ZLOG_ERROR, "[%s:%d] empty value", ini_filename, ini_lineno);
982
config = (char *)current_wp->config + WPO(php_values);
866
983
err = fpm_conf_set_array(key, value, &config, 0);
868
985
} else if (!strcmp("php_admin_value", Z_STRVAL_P(name))) {
869
config = (char *)current_wp->config + offsetof(struct fpm_worker_pool_config_s, php_admin_values);
986
if (!*Z_STRVAL_P(value)) {
987
zlog(ZLOG_ERROR, "[%s:%d] empty value", ini_filename, ini_lineno);
991
config = (char *)current_wp->config + WPO(php_admin_values);
870
992
err = fpm_conf_set_array(key, value, &config, 0);
872
994
} else if (!strcmp("php_flag", Z_STRVAL_P(name))) {
873
config = (char *)current_wp->config + offsetof(struct fpm_worker_pool_config_s, php_values);
995
config = (char *)current_wp->config + WPO(php_values);
874
996
err = fpm_conf_set_array(key, value, &config, 1);
876
998
} else if (!strcmp("php_admin_flag", Z_STRVAL_P(name))) {
877
config = (char *)current_wp->config + offsetof(struct fpm_worker_pool_config_s, php_admin_values);
999
config = (char *)current_wp->config + WPO(php_admin_values);
878
1000
err = fpm_conf_set_array(key, value, &config, 1);
881
zlog(ZLOG_STUFF, ZLOG_ERROR, "[%s:%d] unknown directive '%s'", ini_filename, ini_lineno, Z_STRVAL_P(name));
1003
zlog(ZLOG_ERROR, "[%s:%d] unknown directive '%s'", ini_filename, ini_lineno, Z_STRVAL_P(name));
887
zlog(ZLOG_STUFF, ZLOG_ERROR, "[%s:%d] error while parsing '%s[%s]' : %s", ini_filename, ini_lineno, Z_STRVAL_P(name), Z_STRVAL_P(key), err);
1009
zlog(ZLOG_ERROR, "[%s:%d] error while parsing '%s[%s]' : %s", ini_filename, ini_lineno, Z_STRVAL_P(name), Z_STRVAL_P(key), err);
986
int fpm_conf_init_main() /* {{{ */
988
char *filename = fpm_globals.config;
1108
static void fpm_conf_dump() /* {{{ */
1110
struct fpm_worker_pool_s *wp;
1112
zlog(ZLOG_NOTICE, "[General]");
1113
zlog(ZLOG_NOTICE, "\tpid = %s", STR2STR(fpm_global_config.pid_file));
1114
zlog(ZLOG_NOTICE, "\tdaemonize = %s", BOOL2STR(fpm_global_config.daemonize));
1115
zlog(ZLOG_NOTICE, "\terror_log = %s", STR2STR(fpm_global_config.error_log));
1116
zlog(ZLOG_NOTICE, "\tlog_level = %s", zlog_get_level_name());
1117
zlog(ZLOG_NOTICE, "\tprocess_control_timeout = %ds", fpm_global_config.process_control_timeout);
1118
zlog(ZLOG_NOTICE, "\temergency_restart_interval = %ds", fpm_global_config.emergency_restart_interval);
1119
zlog(ZLOG_NOTICE, "\temergency_restart_threshold = %d", fpm_global_config.emergency_restart_threshold);
1120
zlog(ZLOG_NOTICE, " ");
1122
for (wp = fpm_worker_all_pools; wp; wp = wp->next) {
1123
struct key_value_s *kv;
1124
if (!wp->config) continue;
1125
zlog(ZLOG_NOTICE, "[%s]", STR2STR(wp->config->name));
1126
zlog(ZLOG_NOTICE, "\tprefix = %s", STR2STR(wp->config->prefix));
1127
zlog(ZLOG_NOTICE, "\tuser = %s", STR2STR(wp->config->user));
1128
zlog(ZLOG_NOTICE, "\tgroup = %s", STR2STR(wp->config->group));
1129
zlog(ZLOG_NOTICE, "\tchroot = %s", STR2STR(wp->config->chroot));
1130
zlog(ZLOG_NOTICE, "\tchdir = %s", STR2STR(wp->config->chdir));
1131
zlog(ZLOG_NOTICE, "\tlisten = %s", STR2STR(wp->config->listen_address));
1132
zlog(ZLOG_NOTICE, "\tlisten.backlog = %d", wp->config->listen_backlog);
1133
zlog(ZLOG_NOTICE, "\tlisten.owner = %s", STR2STR(wp->config->listen_owner));
1134
zlog(ZLOG_NOTICE, "\tlisten.group = %s", STR2STR(wp->config->listen_group));
1135
zlog(ZLOG_NOTICE, "\tlisten.mode = %s", STR2STR(wp->config->listen_mode));
1136
zlog(ZLOG_NOTICE, "\tlisten.allowed_clients = %s", STR2STR(wp->config->listen_allowed_clients));
1137
zlog(ZLOG_NOTICE, "\tpm = %s", PM2STR(wp->config->pm));
1138
zlog(ZLOG_NOTICE, "\tpm.max_children = %d", wp->config->pm_max_children);
1139
zlog(ZLOG_NOTICE, "\tpm.max_requests = %d", wp->config->pm_max_requests);
1140
zlog(ZLOG_NOTICE, "\tpm.start_servers = %d", wp->config->pm_start_servers);
1141
zlog(ZLOG_NOTICE, "\tpm.min_spare_servers = %d", wp->config->pm_min_spare_servers);
1142
zlog(ZLOG_NOTICE, "\tpm.max_spare_servers = %d", wp->config->pm_max_spare_servers);
1143
zlog(ZLOG_NOTICE, "\tpm.status_path = %s", STR2STR(wp->config->pm_status_path));
1144
zlog(ZLOG_NOTICE, "\tping.path = %s", STR2STR(wp->config->ping_path));
1145
zlog(ZLOG_NOTICE, "\tping.response = %s", STR2STR(wp->config->ping_response));
1146
zlog(ZLOG_NOTICE, "\tcatch_workers_output = %s", BOOL2STR(wp->config->catch_workers_output));
1147
zlog(ZLOG_NOTICE, "\trequest_terminate_timeout = %ds", wp->config->request_terminate_timeout);
1148
zlog(ZLOG_NOTICE, "\trequest_slowlog_timeout = %ds", wp->config->request_slowlog_timeout);
1149
zlog(ZLOG_NOTICE, "\tslowlog = %s", STR2STR(wp->config->slowlog));
1150
zlog(ZLOG_NOTICE, "\trlimit_files = %d", wp->config->rlimit_files);
1151
zlog(ZLOG_NOTICE, "\trlimit_core = %d", wp->config->rlimit_core);
1153
for (kv = wp->config->env; kv; kv = kv->next) {
1154
zlog(ZLOG_NOTICE, "\tenv[%s] = %s", kv->key, kv->value);
1157
for (kv = wp->config->php_values; kv; kv = kv->next) {
1158
zlog(ZLOG_NOTICE, "\tphp_value[%s] = %s", kv->key, kv->value);
1161
for (kv = wp->config->php_admin_values; kv; kv = kv->next) {
1162
zlog(ZLOG_NOTICE, "\tphp_admin_value[%s] = %s", kv->key, kv->value);
1164
zlog(ZLOG_NOTICE, " ");
1169
int fpm_conf_init_main(int test_conf) /* {{{ */
993
if (filename == NULL) {
994
spprintf(&filename, 0, "%s/php-fpm.conf", PHP_SYSCONFDIR);
998
ret = fpm_conf_load_ini_file(filename TSRMLS_CC);
1174
if (fpm_globals.prefix && *fpm_globals.prefix) {
1175
if (!fpm_conf_is_dir(fpm_globals.prefix)) {
1176
zlog(ZLOG_ERROR, "the global prefix '%s' does not exist or is not a directory", fpm_globals.prefix);
1181
if (fpm_globals.config == NULL) {
1184
if (fpm_globals.prefix == NULL) {
1185
spprintf(&tmp, 0, "%s/php-fpm.conf", PHP_SYSCONFDIR);
1187
spprintf(&tmp, 0, "%s/etc/php-fpm.conf", fpm_globals.prefix);
1191
zlog(ZLOG_SYSERROR, "spprintf() failed (tmp for fpm_globals.config)");
1195
fpm_globals.config = strdup(tmp);
1198
if (!fpm_globals.config) {
1199
zlog(ZLOG_SYSERROR, "spprintf() failed (fpm_globals.config)");
1204
ret = fpm_conf_load_ini_file(fpm_globals.config TSRMLS_CC);
1001
zlog(ZLOG_STUFF, ZLOG_ERROR, "failed to load configuration file '%s'", filename);
1002
if (free) efree(filename);
1207
zlog(ZLOG_ERROR, "failed to load configuration file '%s'", fpm_globals.config);
1006
if (free) efree(filename);
1008
1211
if (0 > fpm_conf_post_process()) {
1009
zlog(ZLOG_STUFF, ZLOG_ERROR, "failed to post process the configuration");
1212
zlog(ZLOG_ERROR, "failed to post process the configuration");
1217
if (test_conf > 1) {
1220
zlog(ZLOG_NOTICE, "configuration file %s test is successful\n", fpm_globals.config);