cvs: php-src(PHP_5_2) / NEWS /main SAPI.c SAPI.h php_ini.c /sapi/cgi cgi_main.c /sapi/cli php_cli.c ZendEngine2 zend_ini.h zend_ini_parser.y
zend_ini_scanner.h zend_ini_scanner.l
| From: | Dmitry Stogov | Date: | Tue, 19 Sep 2006 20:33:12 +0000 |
| Subject: | cvs: php-src(PHP_5_2) / NEWS /main SAPI.c SAPI.h php_ini.c /sapi/cgi cgi_main.c /sapi/cli php_cli.c ZendEngine2 zend_ini.h zend_ini_parser.y zend_ini_scanner.h zend_ini_scanner.l |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-40608@lists.php.net to get a copy of this message | ||
dmitry Tue Sep 19 20:33:12 2006 UTC
Modified files: (Branch: PHP_5_2)
/php-src/main SAPI.h SAPI.c php_ini.c
/php-src NEWS
/ZendEngine2 zend_ini.h zend_ini_parser.y zend_ini_scanner.h
zend_ini_scanner.l
/php-src/sapi/cgi cgi_main.c
/php-src/sapi/cli php_cli.c
Log:
MFH: Fixed mess with CGI/CLI -d command line option (now it works with cgi; constants are working
exactly like in php.ini; with FastCGI -d affects all requests).
http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.h?r1=1.114.2.1&r2=1.114.2.1.2.1&diff_format=u Index: php-src/main/SAPI.h diff -u php-src/main/SAPI.h:1.114.2.1 php-src/main/SAPI.h:1.114.2.1.2.1 --- php-src/main/SAPI.h:1.114.2.1 Sun Jan 1 12:50:17 2006 +++ php-src/main/SAPI.h Tue Sep 19 20:33:11 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: SAPI.h,v 1.114.2.1 2006/01/01 12:50:17 sniper Exp $ */ +/* $Id: SAPI.h,v 1.114.2.1.2.1 2006/09/19 20:33:11 dmitry Exp $ */ #ifndef SAPI_H #define SAPI_H @@ -257,6 +257,8 @@ void (*ini_defaults)(HashTable *configuration_hash); int phpinfo_as_text; + + char *ini_entries; }; http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.1&r2=1.202.2.7.2.2&diff_format=u Index: php-src/main/SAPI.c diff -u php-src/main/SAPI.c:1.202.2.7.2.1 php-src/main/SAPI.c:1.202.2.7.2.2 --- php-src/main/SAPI.c:1.202.2.7.2.1 Wed May 10 21:19:32 2006 +++ php-src/main/SAPI.c Tue Sep 19 20:33:11 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: SAPI.c,v 1.202.2.7.2.1 2006/05/10 21:19:32 rasmus Exp $ */ +/* $Id: SAPI.c,v 1.202.2.7.2.2 2006/09/19 20:33:11 dmitry Exp $ */ #include <ctype.h> #include <sys/stat.h> @@ -76,6 +76,7 @@ SAPI_API void sapi_startup(sapi_module_struct *sf) { + sf->ini_entries = NULL; sapi_module = *sf; #ifdef ZTS http://cvs.php.net/viewvc.cgi/php-src/main/php_ini.c?r1=1.136.2.4.2.3&r2=1.136.2.4.2.4&diff_format=u Index: php-src/main/php_ini.c diff -u php-src/main/php_ini.c:1.136.2.4.2.3 php-src/main/php_ini.c:1.136.2.4.2.4 --- php-src/main/php_ini.c:1.136.2.4.2.3 Tue Sep 5 11:54:15 2006 +++ php-src/main/php_ini.c Tue Sep 19 20:33:11 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.136.2.4.2.3 2006/09/05 11:54:15 edink Exp $ */ +/* $Id: php_ini.c,v 1.136.2.4.2.4 2006/09/19 20:33:11 dmitry Exp $ */ #include "php.h" #include "ext/standard/info.h" @@ -529,6 +529,11 @@ zend_llist_destroy(&scanned_ini_list); } } + + if (sapi_module.ini_entries) { + zend_parse_ini_string(sapi_module.ini_entries, 1, php_config_ini_parser_cb, &extension_lists); + } + return SUCCESS; } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.257&r2=1.2027.2.547.2.258&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.257 php-src/NEWS:1.2027.2.547.2.258 --- php-src/NEWS:1.2027.2.547.2.257 Tue Sep 19 15:45:22 2006 +++ php-src/NEWS Tue Sep 19 20:33:12 2006 @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Sep 2006, PHP 5.2.0 +- Fixed mess with CGI/CLI -d option (now it works with cgi; constants are + working exactly like in php.ini; with FastCGI -d affects all requests). + (Dmitry) - Fixed bug #38844 (curl_easy_strerror() is defined only since cURL 7.12.0). (Tony) - Fixed bug #38574 (missing curl constants and improper constant detection). http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini.h?r1=1.34.2.1&r2=1.34.2.1.2.1&diff_format=u Index: ZendEngine2/zend_ini.h diff -u ZendEngine2/zend_ini.h:1.34.2.1 ZendEngine2/zend_ini.h:1.34.2.1.2.1 --- ZendEngine2/zend_ini.h:1.34.2.1 Wed Jan 4 23:53:04 2006 +++ ZendEngine2/zend_ini.h Tue Sep 19 20:33:12 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.h,v 1.34.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ini.h,v 1.34.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #ifndef ZEND_INI_H #define ZEND_INI_H @@ -193,6 +193,7 @@ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, void *arg); BEGIN_EXTERN_C() ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); END_EXTERN_C() #define ZEND_INI_PARSER_ENTRY 1 http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_parser.y?r1=1.41.2.2&r2=1.41.2.2.2.1&diff_format=u Index: ZendEngine2/zend_ini_parser.y diff -u ZendEngine2/zend_ini_parser.y:1.41.2.2 ZendEngine2/zend_ini_parser.y:1.41.2.2.2.1 --- ZendEngine2/zend_ini_parser.y:1.41.2.2 Wed Apr 12 09:51:54 2006 +++ ZendEngine2/zend_ini_parser.y Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_parser.y,v 1.41.2.2 2006/04/12 09:51:54 dmitry Exp $ */ +/* $Id: zend_ini_parser.y,v 1.41.2.2.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #define DEBUG_CFG_PARSER 0 #include "zend.h" @@ -157,10 +157,14 @@ TSRMLS_FETCH(); currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C); - error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ - error_buf = (char *) emalloc(error_buf_len); + if (currently_parsed_filename) { + error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ + error_buf = (char *) emalloc(error_buf_len); - sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + } else { + error_buf = estrdup("Invalid configuration directive\n"); + } if (CG(ini_parser_unbuffered_errors)) { #ifdef PHP_WIN32 @@ -202,6 +206,29 @@ } +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg) +{ + zend_ini_parser_param ini_parser_param; + TSRMLS_FETCH(); + + ini_parser_param.ini_parser_cb = ini_parser_cb; + ini_parser_param.arg = arg; + + CG(ini_parser_param) = &ini_parser_param; + if (zend_ini_prepare_string_for_scanning(str TSRMLS_CC)==FAILURE) { + return FAILURE; + } + + CG(ini_parser_unbuffered_errors) = unbuffered_errors; + + if (ini_parse(TSRMLS_C)) { + return SUCCESS; + } else { + return FAILURE; + } +} + + %} %pure_parser http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.h?r1=1.14.2.1&r2=1.14.2.1.2.1&diff_format=u Index: ZendEngine2/zend_ini_scanner.h diff -u ZendEngine2/zend_ini_scanner.h:1.14.2.1 ZendEngine2/zend_ini_scanner.h:1.14.2.1.2.1 --- ZendEngine2/zend_ini_scanner.h:1.14.2.1 Wed Jan 4 23:53:04 2006 +++ ZendEngine2/zend_ini_scanner.h Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.h,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ini_scanner.h,v 1.14.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #ifndef _ZEND_INI_SCANNER_H #define _ZEND_INI_SCANNER_H @@ -26,6 +26,7 @@ int zend_ini_scanner_get_lineno(TSRMLS_D); char *zend_ini_scanner_get_filename(TSRMLS_D); int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC); +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC); void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC); int ini_lex(zval *ini_lval TSRMLS_DC); END_EXTERN_C() http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.l?r1=1.41.2.2&r2=1.41.2.2.2.1&diff_format=u Index: ZendEngine2/zend_ini_scanner.l diff -u ZendEngine2/zend_ini_scanner.l:1.41.2.2 ZendEngine2/zend_ini_scanner.l:1.41.2.2.2.1 --- ZendEngine2/zend_ini_scanner.l:1.41.2.2 Tue Jan 17 19:56:25 2006 +++ ZendEngine2/zend_ini_scanner.l Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.l,v 1.41.2.2 2006/01/17 19:56:25 iliaa Exp $ */ +/* $Id: zend_ini_scanner.l,v 1.41.2.2.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -83,6 +83,17 @@ } +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC) +{ + int len = strlen(str); + + yyin = NULL; + yy_scan_buffer(str, len + 2 TSRMLS_CC); + ini_filename = NULL; + return SUCCESS; +} + + void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC) { zend_stream_close(fh); http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.267.2.15.2.10&r2=1.267.2.15.2.11&diff_format=u Index: php-src/sapi/cgi/cgi_main.c diff -u php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.10 php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.11 --- php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.10 Thu Aug 31 13:11:58 2006 +++ php-src/sapi/cgi/cgi_main.c Tue Sep 19 20:33:12 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: cgi_main.c,v 1.267.2.15.2.10 2006/08/31 13:11:58 dmitry Exp $ */ +/* $Id: cgi_main.c,v 1.267.2.15.2.11 2006/09/19 20:33:12 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -919,21 +919,6 @@ } /* }}} */ -static void define_command_line_ini_entry(char *arg) -{ - char *name, *value; - - name = arg; - value = strchr(arg, '='); - if (value) { - *value = 0; - value++; - } else { - value = "1"; - } - zend_alter_ini_entry(name, strlen(name) + 1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); -} - #if PHP_FASTCGI /** * Clean up child processes upon exit @@ -987,6 +972,7 @@ int orig_optind = php_optind; char *orig_optarg = php_optarg; char *script_file = NULL; + int ini_entries_len = 0; #if FORCE_CGI_REDIRECT long force_redirect = 1; char *redirect_status_env = NULL; @@ -1076,6 +1062,23 @@ case 'n': cgi_sapi_module.php_ini_ignore = 1; break; + case 'd': { + /* define ini entries on command line */ + int len = strlen(php_optarg); + + if (strchr(php_optarg, '=')) { + cgi_sapi_module.ini_entries = realloc(cgi_sapi_module.ini_entries, ini_entries_len + len + sizeof("\n\0")); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len + len, "\n\0", sizeof("\n\0")); + ini_entries_len += len + sizeof("\n\0") - 2; + } else { + cgi_sapi_module.ini_entries = realloc(cgi_sapi_module.ini_entries, ini_entries_len + len + sizeof("=1\n\0")); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len + len, "=1\n\0", sizeof("=1\n\0")); + ini_entries_len += len + sizeof("=1\n\0") - 2; + } + break; + } #if PHP_FASTCGI #ifndef PHP_WIN32 /* if we're started on command line, check to see if @@ -1378,9 +1381,6 @@ case 'C': /* don't chdir to the script directory */ SG(options) |= SAPI_OPTION_NO_CHDIR; break; - case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(php_optarg); - break; case 'e': /* enable extended info output */ CG(extended_info) = 1; @@ -1702,6 +1702,9 @@ if (cgi_sapi_module.php_ini_path_override) { free(cgi_sapi_module.php_ini_path_override); } + if (cgi_sapi_module.ini_entries) { + free(cgi_sapi_module.ini_entries); + } } zend_catch { exit_status = 255; } zend_end_try(); http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/php_cli.c?r1=1.129.2.13.2.8&r2=1.129.2.13.2.9&diff_format=u Index: php-src/sapi/cli/php_cli.c diff -u php-src/sapi/cli/php_cli.c:1.129.2.13.2.8 php-src/sapi/cli/php_cli.c:1.129.2.13.2.9 --- php-src/sapi/cli/php_cli.c:1.129.2.13.2.8 Fri Sep 15 08:18:36 2006 +++ php-src/sapi/cli/php_cli.c Tue Sep 19 20:33:12 2006 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_cli.c,v 1.129.2.13.2.8 2006/09/15 08:18:36 tony2001 Exp $ */ +/* $Id: php_cli.c,v 1.129.2.13.2.9 2006/09/19 20:33:12 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -106,6 +106,15 @@ #define PHP_MODE_REFLECTION_CLASS 9 #define PHP_MODE_REFLECTION_EXTENSION 10 +#define HARDCODED_INI \ + "html_errors=0\n" \ + "register_argc_argv=1\n" \ + "implicit_flush=1\n" \ + "output_buffering=0\n" \ + "max_execution_time=0\n" \ + "max_input_time=-1\n" + + static char *php_optarg = NULL; static int php_optind = 1; #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) @@ -342,10 +351,6 @@ zend_hash_update(configuration_hash, name, sizeof(name), tmp, sizeof(zval), (void**)&entry);\ Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry)) -/* hard coded ini settings must be set in main() */ -#define INI_HARDCODED(name,value)\ - zend_alter_ini_entry(name, sizeof(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); - static void sapi_cli_ini_defaults(HashTable *configuration_hash) { zval *tmp, *entry; @@ -451,29 +456,6 @@ } /* }}} */ -static void define_command_line_ini_entry(char *arg TSRMLS_DC) -{ - char *name, *value; - - name = arg; - value = strchr(arg, '='); - if (value) { - *value = 0; - value++; - } else { - value = "1"; - } - - if (!strcasecmp(name, "extension")) { /* load function module */ - zval extension, zval; - ZVAL_STRING(&extension, value, 0); - php_dl(&extension, MODULE_PERSISTENT, &zval, 1 TSRMLS_CC); - } else { - zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); - } -} - - static php_stream *s_in_process = NULL; static void cli_register_file_handles(TSRMLS_D) @@ -602,6 +584,7 @@ int argc = __argc; char **argv = __argv; #endif + int ini_entries_len = 0; #if defined(PHP_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP) { @@ -646,6 +629,10 @@ setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */ #endif + ini_entries_len = strlen(HARDCODED_INI); + cli_sapi_module.ini_entries = malloc(ini_entries_len+2); + memcpy(cli_sapi_module.ini_entries, HARDCODED_INI, ini_entries_len+1); + cli_sapi_module.ini_entries[ini_entries_len+1] = 0; while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) { switch (c) { @@ -655,6 +642,23 @@ case 'n': cli_sapi_module.php_ini_ignore = 1; break; + case 'd': { + /* define ini entries on command line */ + int len = strlen(php_optarg); + + if (strchr(php_optarg, '=')) { + cli_sapi_module.ini_entries = realloc(cli_sapi_module.ini_entries, ini_entries_len + len + sizeof("\n\0")); + memcpy(cli_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cli_sapi_module.ini_entries + ini_entries_len + len, "\n\0", sizeof("\n\0")); + ini_entries_len += len + sizeof("\n\0") - 2; + } else { + cli_sapi_module.ini_entries = realloc(cli_sapi_module.ini_entries, ini_entries_len + len + sizeof("=1\n\0")); + memcpy(cli_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cli_sapi_module.ini_entries + ini_entries_len + len, "=1\n\0", sizeof("=1\n\0")); + ini_entries_len += len + sizeof("=1\n\0") - 2; + } + break; + } } } php_optind = orig_optind; @@ -683,7 +687,6 @@ module_started = 1; zend_first_try { - zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */ CG(in_compilation) = 0; /* not initialized but needed for several options */ EG(uninitialized_zval_ptr) = NULL; @@ -693,21 +696,9 @@ goto out_err; } - /* here is the place for hard coded defaults which cannot be overwritten in the ini file */ - INI_HARDCODED("register_argc_argv", "1"); - INI_HARDCODED("html_errors", "0"); - INI_HARDCODED("implicit_flush", "1"); - INI_HARDCODED("output_buffering", "0"); - INI_HARDCODED("max_execution_time", "0"); - INI_HARDCODED("max_input_time", "-1"); - while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) { switch (c) { - case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(php_optarg TSRMLS_CC); - break; - case 'h': /* help & quit */ case '?': if (php_request_startup(TSRMLS_C)==FAILURE) { @@ -1260,6 +1251,10 @@ if (cli_sapi_module.php_ini_path_override) { free(cli_sapi_module.php_ini_path_override); } + if (cli_sapi_module.ini_entries) { + free(cli_sapi_module.ini_entries); + } + if (module_started) { php_module_shutdown(TSRMLS_C); }
http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.h?r1=1.114.2.1&r2=1.114.2.1.2.1&diff_format=u Index: php-src/main/SAPI.h diff -u php-src/main/SAPI.h:1.114.2.1 php-src/main/SAPI.h:1.114.2.1.2.1 --- php-src/main/SAPI.h:1.114.2.1 Sun Jan 1 12:50:17 2006 +++ php-src/main/SAPI.h Tue Sep 19 20:33:11 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: SAPI.h,v 1.114.2.1 2006/01/01 12:50:17 sniper Exp $ */ +/* $Id: SAPI.h,v 1.114.2.1.2.1 2006/09/19 20:33:11 dmitry Exp $ */ #ifndef SAPI_H #define SAPI_H @@ -257,6 +257,8 @@ void (*ini_defaults)(HashTable *configuration_hash); int phpinfo_as_text; + + char *ini_entries; }; http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.1&r2=1.202.2.7.2.2&diff_format=u Index: php-src/main/SAPI.c diff -u php-src/main/SAPI.c:1.202.2.7.2.1 php-src/main/SAPI.c:1.202.2.7.2.2 --- php-src/main/SAPI.c:1.202.2.7.2.1 Wed May 10 21:19:32 2006 +++ php-src/main/SAPI.c Tue Sep 19 20:33:11 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: SAPI.c,v 1.202.2.7.2.1 2006/05/10 21:19:32 rasmus Exp $ */ +/* $Id: SAPI.c,v 1.202.2.7.2.2 2006/09/19 20:33:11 dmitry Exp $ */ #include <ctype.h> #include <sys/stat.h> @@ -76,6 +76,7 @@ SAPI_API void sapi_startup(sapi_module_struct *sf) { + sf->ini_entries = NULL; sapi_module = *sf; #ifdef ZTS http://cvs.php.net/viewvc.cgi/php-src/main/php_ini.c?r1=1.136.2.4.2.3&r2=1.136.2.4.2.4&diff_format=u Index: php-src/main/php_ini.c diff -u php-src/main/php_ini.c:1.136.2.4.2.3 php-src/main/php_ini.c:1.136.2.4.2.4 --- php-src/main/php_ini.c:1.136.2.4.2.3 Tue Sep 5 11:54:15 2006 +++ php-src/main/php_ini.c Tue Sep 19 20:33:11 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.136.2.4.2.3 2006/09/05 11:54:15 edink Exp $ */ +/* $Id: php_ini.c,v 1.136.2.4.2.4 2006/09/19 20:33:11 dmitry Exp $ */ #include "php.h" #include "ext/standard/info.h" @@ -529,6 +529,11 @@ zend_llist_destroy(&scanned_ini_list); } } + + if (sapi_module.ini_entries) { + zend_parse_ini_string(sapi_module.ini_entries, 1, php_config_ini_parser_cb, &extension_lists); + } + return SUCCESS; } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.257&r2=1.2027.2.547.2.258&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.257 php-src/NEWS:1.2027.2.547.2.258 --- php-src/NEWS:1.2027.2.547.2.257 Tue Sep 19 15:45:22 2006 +++ php-src/NEWS Tue Sep 19 20:33:12 2006 @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Sep 2006, PHP 5.2.0 +- Fixed mess with CGI/CLI -d option (now it works with cgi; constants are + working exactly like in php.ini; with FastCGI -d affects all requests). + (Dmitry) - Fixed bug #38844 (curl_easy_strerror() is defined only since cURL 7.12.0). (Tony) - Fixed bug #38574 (missing curl constants and improper constant detection). http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini.h?r1=1.34.2.1&r2=1.34.2.1.2.1&diff_format=u Index: ZendEngine2/zend_ini.h diff -u ZendEngine2/zend_ini.h:1.34.2.1 ZendEngine2/zend_ini.h:1.34.2.1.2.1 --- ZendEngine2/zend_ini.h:1.34.2.1 Wed Jan 4 23:53:04 2006 +++ ZendEngine2/zend_ini.h Tue Sep 19 20:33:12 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini.h,v 1.34.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ini.h,v 1.34.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #ifndef ZEND_INI_H #define ZEND_INI_H @@ -193,6 +193,7 @@ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, void *arg); BEGIN_EXTERN_C() ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); END_EXTERN_C() #define ZEND_INI_PARSER_ENTRY 1 http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_parser.y?r1=1.41.2.2&r2=1.41.2.2.2.1&diff_format=u Index: ZendEngine2/zend_ini_parser.y diff -u ZendEngine2/zend_ini_parser.y:1.41.2.2 ZendEngine2/zend_ini_parser.y:1.41.2.2.2.1 --- ZendEngine2/zend_ini_parser.y:1.41.2.2 Wed Apr 12 09:51:54 2006 +++ ZendEngine2/zend_ini_parser.y Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_parser.y,v 1.41.2.2 2006/04/12 09:51:54 dmitry Exp $ */ +/* $Id: zend_ini_parser.y,v 1.41.2.2.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #define DEBUG_CFG_PARSER 0 #include "zend.h" @@ -157,10 +157,14 @@ TSRMLS_FETCH(); currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C); - error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ - error_buf = (char *) emalloc(error_buf_len); + if (currently_parsed_filename) { + error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ + error_buf = (char *) emalloc(error_buf_len); - sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); + } else { + error_buf = estrdup("Invalid configuration directive\n"); + } if (CG(ini_parser_unbuffered_errors)) { #ifdef PHP_WIN32 @@ -202,6 +206,29 @@ } +ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg) +{ + zend_ini_parser_param ini_parser_param; + TSRMLS_FETCH(); + + ini_parser_param.ini_parser_cb = ini_parser_cb; + ini_parser_param.arg = arg; + + CG(ini_parser_param) = &ini_parser_param; + if (zend_ini_prepare_string_for_scanning(str TSRMLS_CC)==FAILURE) { + return FAILURE; + } + + CG(ini_parser_unbuffered_errors) = unbuffered_errors; + + if (ini_parse(TSRMLS_C)) { + return SUCCESS; + } else { + return FAILURE; + } +} + + %} %pure_parser http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.h?r1=1.14.2.1&r2=1.14.2.1.2.1&diff_format=u Index: ZendEngine2/zend_ini_scanner.h diff -u ZendEngine2/zend_ini_scanner.h:1.14.2.1 ZendEngine2/zend_ini_scanner.h:1.14.2.1.2.1 --- ZendEngine2/zend_ini_scanner.h:1.14.2.1 Wed Jan 4 23:53:04 2006 +++ ZendEngine2/zend_ini_scanner.h Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.h,v 1.14.2.1 2006/01/04 23:53:04 andi Exp $ */ +/* $Id: zend_ini_scanner.h,v 1.14.2.1.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #ifndef _ZEND_INI_SCANNER_H #define _ZEND_INI_SCANNER_H @@ -26,6 +26,7 @@ int zend_ini_scanner_get_lineno(TSRMLS_D); char *zend_ini_scanner_get_filename(TSRMLS_D); int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC); +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC); void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC); int ini_lex(zval *ini_lval TSRMLS_DC); END_EXTERN_C() http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.l?r1=1.41.2.2&r2=1.41.2.2.2.1&diff_format=u Index: ZendEngine2/zend_ini_scanner.l diff -u ZendEngine2/zend_ini_scanner.l:1.41.2.2 ZendEngine2/zend_ini_scanner.l:1.41.2.2.2.1 --- ZendEngine2/zend_ini_scanner.l:1.41.2.2 Tue Jan 17 19:56:25 2006 +++ ZendEngine2/zend_ini_scanner.l Tue Sep 19 20:33:12 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_ini_scanner.l,v 1.41.2.2 2006/01/17 19:56:25 iliaa Exp $ */ +/* $Id: zend_ini_scanner.l,v 1.41.2.2.2.1 2006/09/19 20:33:12 dmitry Exp $ */ #define yyleng SCNG(yy_leng) #define yytext SCNG(yy_text) @@ -83,6 +83,17 @@ } +int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC) +{ + int len = strlen(str); + + yyin = NULL; + yy_scan_buffer(str, len + 2 TSRMLS_CC); + ini_filename = NULL; + return SUCCESS; +} + + void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC) { zend_stream_close(fh); http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.267.2.15.2.10&r2=1.267.2.15.2.11&diff_format=u Index: php-src/sapi/cgi/cgi_main.c diff -u php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.10 php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.11 --- php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.10 Thu Aug 31 13:11:58 2006 +++ php-src/sapi/cgi/cgi_main.c Tue Sep 19 20:33:12 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: cgi_main.c,v 1.267.2.15.2.10 2006/08/31 13:11:58 dmitry Exp $ */ +/* $Id: cgi_main.c,v 1.267.2.15.2.11 2006/09/19 20:33:12 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -919,21 +919,6 @@ } /* }}} */ -static void define_command_line_ini_entry(char *arg) -{ - char *name, *value; - - name = arg; - value = strchr(arg, '='); - if (value) { - *value = 0; - value++; - } else { - value = "1"; - } - zend_alter_ini_entry(name, strlen(name) + 1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); -} - #if PHP_FASTCGI /** * Clean up child processes upon exit @@ -987,6 +972,7 @@ int orig_optind = php_optind; char *orig_optarg = php_optarg; char *script_file = NULL; + int ini_entries_len = 0; #if FORCE_CGI_REDIRECT long force_redirect = 1; char *redirect_status_env = NULL; @@ -1076,6 +1062,23 @@ case 'n': cgi_sapi_module.php_ini_ignore = 1; break; + case 'd': { + /* define ini entries on command line */ + int len = strlen(php_optarg); + + if (strchr(php_optarg, '=')) { + cgi_sapi_module.ini_entries = realloc(cgi_sapi_module.ini_entries, ini_entries_len + len + sizeof("\n\0")); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len + len, "\n\0", sizeof("\n\0")); + ini_entries_len += len + sizeof("\n\0") - 2; + } else { + cgi_sapi_module.ini_entries = realloc(cgi_sapi_module.ini_entries, ini_entries_len + len + sizeof("=1\n\0")); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cgi_sapi_module.ini_entries + ini_entries_len + len, "=1\n\0", sizeof("=1\n\0")); + ini_entries_len += len + sizeof("=1\n\0") - 2; + } + break; + } #if PHP_FASTCGI #ifndef PHP_WIN32 /* if we're started on command line, check to see if @@ -1378,9 +1381,6 @@ case 'C': /* don't chdir to the script directory */ SG(options) |= SAPI_OPTION_NO_CHDIR; break; - case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(php_optarg); - break; case 'e': /* enable extended info output */ CG(extended_info) = 1; @@ -1702,6 +1702,9 @@ if (cgi_sapi_module.php_ini_path_override) { free(cgi_sapi_module.php_ini_path_override); } + if (cgi_sapi_module.ini_entries) { + free(cgi_sapi_module.ini_entries); + } } zend_catch { exit_status = 255; } zend_end_try(); http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/php_cli.c?r1=1.129.2.13.2.8&r2=1.129.2.13.2.9&diff_format=u Index: php-src/sapi/cli/php_cli.c diff -u php-src/sapi/cli/php_cli.c:1.129.2.13.2.8 php-src/sapi/cli/php_cli.c:1.129.2.13.2.9 --- php-src/sapi/cli/php_cli.c:1.129.2.13.2.8 Fri Sep 15 08:18:36 2006 +++ php-src/sapi/cli/php_cli.c Tue Sep 19 20:33:12 2006 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_cli.c,v 1.129.2.13.2.8 2006/09/15 08:18:36 tony2001 Exp $ */ +/* $Id: php_cli.c,v 1.129.2.13.2.9 2006/09/19 20:33:12 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -106,6 +106,15 @@ #define PHP_MODE_REFLECTION_CLASS 9 #define PHP_MODE_REFLECTION_EXTENSION 10 +#define HARDCODED_INI \ + "html_errors=0\n" \ + "register_argc_argv=1\n" \ + "implicit_flush=1\n" \ + "output_buffering=0\n" \ + "max_execution_time=0\n" \ + "max_input_time=-1\n" + + static char *php_optarg = NULL; static int php_optind = 1; #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE) @@ -342,10 +351,6 @@ zend_hash_update(configuration_hash, name, sizeof(name), tmp, sizeof(zval), (void**)&entry);\ Z_STRVAL_P(entry) = zend_strndup(Z_STRVAL_P(entry), Z_STRLEN_P(entry)) -/* hard coded ini settings must be set in main() */ -#define INI_HARDCODED(name,value)\ - zend_alter_ini_entry(name, sizeof(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); - static void sapi_cli_ini_defaults(HashTable *configuration_hash) { zval *tmp, *entry; @@ -451,29 +456,6 @@ } /* }}} */ -static void define_command_line_ini_entry(char *arg TSRMLS_DC) -{ - char *name, *value; - - name = arg; - value = strchr(arg, '='); - if (value) { - *value = 0; - value++; - } else { - value = "1"; - } - - if (!strcasecmp(name, "extension")) { /* load function module */ - zval extension, zval; - ZVAL_STRING(&extension, value, 0); - php_dl(&extension, MODULE_PERSISTENT, &zval, 1 TSRMLS_CC); - } else { - zend_alter_ini_entry(name, strlen(name)+1, value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); - } -} - - static php_stream *s_in_process = NULL; static void cli_register_file_handles(TSRMLS_D) @@ -602,6 +584,7 @@ int argc = __argc; char **argv = __argv; #endif + int ini_entries_len = 0; #if defined(PHP_WIN32) && defined(_DEBUG) && defined(PHP_WIN32_DEBUG_HEAP) { @@ -646,6 +629,10 @@ setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */ #endif + ini_entries_len = strlen(HARDCODED_INI); + cli_sapi_module.ini_entries = malloc(ini_entries_len+2); + memcpy(cli_sapi_module.ini_entries, HARDCODED_INI, ini_entries_len+1); + cli_sapi_module.ini_entries[ini_entries_len+1] = 0; while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) { switch (c) { @@ -655,6 +642,23 @@ case 'n': cli_sapi_module.php_ini_ignore = 1; break; + case 'd': { + /* define ini entries on command line */ + int len = strlen(php_optarg); + + if (strchr(php_optarg, '=')) { + cli_sapi_module.ini_entries = realloc(cli_sapi_module.ini_entries, ini_entries_len + len + sizeof("\n\0")); + memcpy(cli_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cli_sapi_module.ini_entries + ini_entries_len + len, "\n\0", sizeof("\n\0")); + ini_entries_len += len + sizeof("\n\0") - 2; + } else { + cli_sapi_module.ini_entries = realloc(cli_sapi_module.ini_entries, ini_entries_len + len + sizeof("=1\n\0")); + memcpy(cli_sapi_module.ini_entries + ini_entries_len, php_optarg, len); + memcpy(cli_sapi_module.ini_entries + ini_entries_len + len, "=1\n\0", sizeof("=1\n\0")); + ini_entries_len += len + sizeof("=1\n\0") - 2; + } + break; + } } } php_optind = orig_optind; @@ -683,7 +687,6 @@ module_started = 1; zend_first_try { - zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */ CG(in_compilation) = 0; /* not initialized but needed for several options */ EG(uninitialized_zval_ptr) = NULL; @@ -693,21 +696,9 @@ goto out_err; } - /* here is the place for hard coded defaults which cannot be overwritten in the ini file */ - INI_HARDCODED("register_argc_argv", "1"); - INI_HARDCODED("html_errors", "0"); - INI_HARDCODED("implicit_flush", "1"); - INI_HARDCODED("output_buffering", "0"); - INI_HARDCODED("max_execution_time", "0"); - INI_HARDCODED("max_input_time", "-1"); - while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) { switch (c) { - case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(php_optarg TSRMLS_CC); - break; - case 'h': /* help & quit */ case '?': if (php_request_startup(TSRMLS_C)==FAILURE) { @@ -1260,6 +1251,10 @@ if (cli_sapi_module.php_ini_path_override) { free(cli_sapi_module.php_ini_path_override); } + if (cli_sapi_module.ini_entries) { + free(cli_sapi_module.ini_entries); + } + if (module_started) { php_module_shutdown(TSRMLS_C); }