fat Tue, 20 Apr 2010 21:13:40 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=298236
Log: Change php_defines in configuration file to php_value,php_admin_value,php_flag,php_admin_flag (as in the apache sapi). php_admin* sets values as ZEND_INI_SYSTEM mode while php_* sets values as ZEND_INI_USER Changed paths: U php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c U php/php-src/trunk/sapi/fpm/fpm/fpm_conf.h U php/php-src/trunk/sapi/fpm/fpm/fpm_php.c U php/php-src/trunk/sapi/fpm/fpm/fpm_php.h U php/php-src/trunk/sapi/fpm/php-fpm.conf.in
Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c =================================================================== --- php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c 2010-04-20 20:02:32 UTC (rev 298235) +++ php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c 2010-04-20 21:13:40 UTC (rev 298236) @@ -239,12 +239,27 @@ return "xml_conf_set_slot_key_value_pair(): strdup() failed"; } + kv->next = **parent; **parent = kv; - *parent = &kv->next; return NULL; } /* }}} */ +static char *xml_conf_set_slot_key_value_pair_bool(void **conf, char *name, void *vv, intptr_t offset) /* {{{ */ +{ + int value; + void *subconf = &value; + char *error; + + error = xml_conf_set_slot_boolean(&subconf, name, vv, 0); + if (error) { + return error; + } + + return(xml_conf_set_slot_key_value_pair(conf, name, value ? "On" : "Off", offset)); +} +/* }}} */ + static struct xml_conf_section fpm_conf_set_key_value_pairs_subsection_conf = { .path = "key_value_pairs somewhere", /* fixme */ .parsers = (struct xml_value_parser []) { @@ -253,6 +268,14 @@ } }; +static struct xml_conf_section fpm_conf_set_key_value_pairs_subsection_conf_bool = { + .path = "key_value_pairs somewhere", /* fixme */ + .parsers = (struct xml_value_parser []) { + { XML_CONF_SCALAR, 0, &xml_conf_set_slot_key_value_pair_bool, 0 }, + { 0, 0, 0, 0 } + } +}; + static char *fpm_conf_set_key_value_pairs_subsection(void **conf, char *name, void *xml_node, intptr_t offset) /* {{{ */ { void *next_kv = (char *) *conf + offset; @@ -260,6 +283,13 @@ } /* }}} */ +static char *fpm_conf_set_key_value_pairs_subsection_bool(void **conf, char *name, void *xml_node, intptr_t offset) /* {{{ */ +{ + void *next_kv = (char *) *conf + offset; + return xml_conf_parse_section(&next_kv, &fpm_conf_set_key_value_pairs_subsection_conf_bool, xml_node); +} +/* }}} */ + static void *fpm_worker_pool_config_alloc() /* {{{ */ { static struct fpm_worker_pool_s *current_wp = 0; @@ -303,12 +333,18 @@ free(wpc->listen_options->mode); free(wpc->listen_options); } - for (kv = wpc->php_defines; kv; kv = kv_next) { + for (kv = wpc->php_values; kv; kv = kv_next) { kv_next = kv->next; free(kv->key); free(kv->value); free(kv); } + for (kv = wpc->php_admin_values; kv; kv = kv_next) { + kv_next = kv->next; + free(kv->key); + free(kv->value); + free(kv); + } for (kv = wpc->environment; kv; kv = kv_next) { kv_next = kv->next; free(kv->key); @@ -334,7 +370,10 @@ { XML_CONF_SCALAR, "name", &xml_conf_set_slot_string, offsetof(struct fpm_worker_pool_config_s, name) }, { XML_CONF_SCALAR, "listen_address", &xml_conf_set_slot_string, offsetof(struct fpm_worker_pool_config_s, listen_address) }, { XML_CONF_SUBSECTION, "listen_options", &fpm_conf_set_listen_options_subsection, offsetof(struct fpm_worker_pool_config_s, listen_options) }, - { XML_CONF_SUBSECTION, "php_defines", &fpm_conf_set_key_value_pairs_subsection, offsetof(struct fpm_worker_pool_config_s, php_defines) }, + { XML_CONF_SUBSECTION, "php_value", &fpm_conf_set_key_value_pairs_subsection, offsetof(struct fpm_worker_pool_config_s, php_values) }, + { XML_CONF_SUBSECTION, "php_flag", &fpm_conf_set_key_value_pairs_subsection_bool, offsetof(struct fpm_worker_pool_config_s, php_values) }, + { XML_CONF_SUBSECTION, "php_admin_value", &fpm_conf_set_key_value_pairs_subsection, offsetof(struct fpm_worker_pool_config_s, php_admin_values) }, + { XML_CONF_SUBSECTION, "php_admin_flag", &fpm_conf_set_key_value_pairs_subsection_bool, offsetof(struct fpm_worker_pool_config_s, php_admin_values) }, { XML_CONF_SCALAR, "user", &xml_conf_set_slot_string, offsetof(struct fpm_worker_pool_config_s, user) }, { XML_CONF_SCALAR, "group", &xml_conf_set_slot_string, offsetof(struct fpm_worker_pool_config_s, group) }, { XML_CONF_SCALAR, "chroot", &xml_conf_set_slot_string, offsetof(struct fpm_worker_pool_config_s, chroot) }, Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_conf.h =================================================================== --- php/php-src/trunk/sapi/fpm/fpm/fpm_conf.h 2010-04-20 20:02:32 UTC (rev 298235) +++ php/php-src/trunk/sapi/fpm/fpm/fpm_conf.h 2010-04-20 21:13:40 UTC (rev 298236) @@ -50,7 +50,8 @@ char *name; char *listen_address; struct fpm_listen_options_s *listen_options; - struct key_value_s *php_defines; + struct key_value_s *php_values; + struct key_value_s *php_admin_values; char *user; char *group; char *chroot; Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_php.c =================================================================== --- php/php-src/trunk/sapi/fpm/fpm/fpm_php.c 2010-04-20 20:02:32 UTC (rev 298235) +++ php/php-src/trunk/sapi/fpm/fpm/fpm_php.c 2010-04-20 21:13:40 UTC (rev 298236) @@ -20,7 +20,7 @@ #include "fpm_cleanup.h" #include "fpm_worker_pool.h" -static int zend_ini_alter_master(char *name, int name_length, char *new_value, int new_value_length, int stage TSRMLS_DC) /* {{{ */ +static int fpm_php_zend_ini_alter_master(char *name, int name_length, char *new_value, int new_value_length, int mode, int stage TSRMLS_DC) /* {{{ */ { zend_ini_entry *ini_entry; char *duplicate; @@ -32,10 +32,11 @@ duplicate = strdup(new_value); if (!ini_entry->on_modify - || ini_entry->on_modify(ini_entry, duplicate, new_value_length, - ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC) == SUCCESS) { + || ini_entry->on_modify(ini_entry, duplicate, new_value_length, + ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC) == SUCCESS) { ini_entry->value = duplicate; ini_entry->value_length = new_value_length; + ini_entry->modifiable = mode; } else { free(duplicate); } @@ -73,55 +74,62 @@ } /* }}} */ -static int fpm_php_apply_defines(struct fpm_worker_pool_s *wp) /* {{{ */ +int fpm_php_apply_defines_ex(struct key_value_s *kv, int mode) /* {{{ */ { TSRMLS_FETCH(); - struct key_value_s *kv; - for (kv = wp->config->php_defines; kv; kv = kv->next) { - char *name = kv->key; - char *value = kv->value; - int name_len = strlen(name); - int value_len = strlen(value); + char *name = kv->key; + char *value = kv->value; + int name_len = strlen(name); + int value_len = strlen(value); - if (!strcmp(name, "extension") && *value) { - zval zv; + if (!strcmp(name, "extension") && *value) { + zval zv; + php_dl(value, MODULE_PERSISTENT, &zv, 1 TSRMLS_CC); + return Z_BVAL(zv) ? 1 : -1; + } -#if defined(PHP_VERSION_ID) && (PHP_VERSION_ID >= 50300) - php_dl(value, MODULE_PERSISTENT, &zv, 1 TSRMLS_CC); -#else - zval filename; - ZVAL_STRINGL(&filename, value, value_len, 0); -#if (PHP_MAJOR_VERSION >= 5) - php_dl(&filename, MODULE_PERSISTENT, &zv, 1 TSRMLS_CC); -#else - php_dl(&filename, MODULE_PERSISTENT, &zv TSRMLS_CC); -#endif -#endif - continue; - } + if (fpm_php_zend_ini_alter_master(name, name_len+1, value, value_len, mode, PHP_INI_STAGE_ACTIVATE TSRMLS_CC) == FAILURE) { + return -1; + } - zend_ini_alter_master(name, name_len + 1, value, value_len, PHP_INI_STAGE_ACTIVATE TSRMLS_CC); + if (!strcmp(name, "disable_functions") && *value) { + char *v = strdup(value); + PG(disable_functions) = v; + fpm_php_disable(v, zend_disable_function TSRMLS_CC); + return 1; + } - if (!strcmp(name, "disable_functions") && *value) { - char *v = strdup(value); -#if (PHP_MAJOR_VERSION >= 5) - PG(disable_functions) = v; -#endif - fpm_php_disable(v, zend_disable_function TSRMLS_CC); + if (!strcmp(name, "disable_classes") && *value) { + char *v = strdup(value); + PG(disable_classes) = v; + fpm_php_disable(v, zend_disable_class TSRMLS_CC); + return 1; + } + + return 1; +} +/* }}} */ + +static int fpm_php_apply_defines(struct fpm_worker_pool_s *wp) /* {{{ */ +{ + TSRMLS_FETCH(); + struct key_value_s *kv; + + for (kv = wp->config->php_values; kv; kv = kv->next) { + if (fpm_php_apply_defines_ex(kv, ZEND_INI_USER) == -1) { + fprintf(stderr, "Unable to set php_value '%s'", kv->key); } - else if (!strcmp(name, "disable_classes") && *value) { - char *v = strdup(value); -#if (PHP_MAJOR_VERSION >= 5) - PG(disable_classes) = v; -#endif - fpm_php_disable(v, zend_disable_class TSRMLS_CC); + } + + for (kv = wp->config->php_admin_values; kv; kv = kv->next) { + if (fpm_php_apply_defines_ex(kv, ZEND_INI_SYSTEM) == -1) { + fprintf(stderr, "Unable to set php_admin_value '%s'", kv->key); } } return 0; } -/* }}} */ static int fpm_php_set_allowed_clients(struct fpm_worker_pool_s *wp) /* {{{ */ { Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_php.h =================================================================== --- php/php-src/trunk/sapi/fpm/fpm/fpm_php.h 2010-04-20 20:02:32 UTC (rev 298235) +++ php/php-src/trunk/sapi/fpm/fpm/fpm_php.h 2010-04-20 21:13:40 UTC (rev 298236) @@ -9,6 +9,7 @@ #include "php.h" #include "build-defs.h" /* for PHP_ defines */ +#include "fpm/fpm_conf.h" struct fpm_worker_pool_s; @@ -18,6 +19,7 @@ size_t fpm_php_content_length(TSRMLS_D); void fpm_php_soft_quit(); int fpm_php_init_main(); +int fpm_php_apply_defines_ex(struct key_value_s *kv, int mode); #endif Modified: php/php-src/trunk/sapi/fpm/php-fpm.conf.in =================================================================== --- php/php-src/trunk/sapi/fpm/php-fpm.conf.in 2010-04-20 20:02:32 UTC (rev 298235) +++ php/php-src/trunk/sapi/fpm/php-fpm.conf.in 2010-04-20 21:13:40 UTC (rev 298236) @@ -55,11 +55,21 @@ Additional php.ini defines, specific to this pool of workers. These settings overwrite the values previously defined in the php.ini. - <value name="php_defines"> + Like apache, you can use php_value, php_flag, php_admin_value or php_admin_flag. + Defining 'extension' will search for the corresponding shared extension in extension_dir. + Defining 'disable_functions' or 'disable_classes' won't overwrite previously defined + php.ini value, but the new value will be append. + <value name="php_value"> + <!-- <value name="error_log">/var/log/php-error.log</value> --> + </value> + <value name="php_flag"> + <!-- <value name="log_errors">true</value> --> + </value> + <value name="php_admin_value"> <!-- <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> --> + </value> + <value name="php_admin_flag"> <!-- <value name="display_errors">0</value> --> - <!-- <value name="error_log">/var/log/php-error.log</value> --> - <!-- <value name="log_errors">true</value> --> </value> Unix user of processes
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php