Wouldn't that happen even without the patch? I'd imagine the dynamic
extensions would be last on the list..?
Zeev
At 20:43 20/2/2001, Hartmut Holzgraefe wrote:
>hholzgra Tue Feb 20 17:43:15 2001 EDT
>
> Modified files:
> /php4/main main.c php_ini.c
> Log:
> will now initialize dynamic extensions *after* static ones
>
>Index: php4/main/main.c
>diff -u php4/main/main.c:1.349 php4/main/main.c:1.350
>--- php4/main/main.c:1.349 Sat Jan 13 05:16:56 2001
>+++ php4/main/main.c Tue Feb 20 17:43:15 2001
>@@ -19,7 +19,7 @@
> */
>
>
>-/* $Id: main.c,v 1.349 2001/01/13 13:16:56 zeev Exp $ */
>+/* $Id: main.c,v 1.350 2001/02/21 01:43:15 hholzgra Exp $ */
>
>
> #include <stdio.h>
>@@ -818,17 +818,27 @@
>
> le_index_ptr = zend_register_list_destructors_ex(NULL, NULL,
> "index pointer", 0);
>
>+
>+ /* this will read in php.ini, set up the configuration parameters,
>+ load zend extensions and register php function extensions
>+ to be loaded later */
> if (php_init_config(sf->php_ini_path_override) == FAILURE) {
> return FAILURE;
> }
>
> REGISTER_INI_ENTRIES();
>
>+ /* initialize fopen wrappers registry
>+ (this uses configuration parameters from php.ini)
>+ */
> if (php_init_fopen_wrappers() == FAILURE) {
> php_printf("PHP: Unable to initialize fopen url
> wrappers.\n");
> return FAILURE;
> }
>
>+ /* initialize registry for images to be used in phpinfo()
>+ (this uses configuration parameters from php.ini)
>+ */
> if (php_init_info_logos() == FAILURE) {
> php_printf("PHP: Unable to initialize info phpinfo
> logos.\n");
> return FAILURE;
>@@ -846,14 +856,34 @@
> return FAILURE;
> }
>
>+ /* startup extensions staticly compiled in */
> if (php_startup_internal_extensions() == FAILURE) {
> php_printf("Unable to start builtin modules\n");
> return FAILURE;
> }
>+
>+ /* load and startup extensions compiled as shared objects (aka DLLs)
>+ as requested by php.ini entries
>+ theese are loaded after initialization of internal extensions
>+ as extensions *might* rely on things from ext/standard
>+ which is always an internal extension and to be initialized
>+ ahead of all other internals
>+ */
>+ if (php_startup_loaded_extensions() == FAILURE) {
>+ php_printf("Unable to start loaded modules\n");
>+ return FAILURE;
>+ }
>+
>+ /* disable certain functions as requested by php.ini */
> php_disable_functions();
>+
> zend_startup_extensions();
>+
>+ /* */
> module_initialized = 1;
> sapi_deactivate(SLS_C);
>+
>+ /* we're done */
> return SUCCESS;
> }
>
>Index: php4/main/php_ini.c
>diff -u php4/main/php_ini.c:1.49 php4/main/php_ini.c:1.50
>--- php4/main/php_ini.c:1.49 Mon Jan 15 02:52:02 2001
>+++ php4/main/php_ini.c Tue Feb 20 17:43:15 2001
>@@ -1,18 +1,18 @@
> /*
> +----------------------------------------------------------------------+
>- | PHP version
>4.0
>|
>+ | PHP version 4.0 |
> +----------------------------------------------------------------------+
>- | Copyright (c) 1997, 1998, 1999, 2000 The PHP
>Group |
>+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
> +----------------------------------------------------------------------+
>- | This source file is subject to version 2.02 of the PHP license, |
>- | that is bundled with this package in the file LICENSE, and
>is |
>- | available at through the world-wide-web
>at |
>- |
>http://www.php.net/license/2_02.txt.
>|
>+ | This source file is subject to version 2.02 of the PHP license, |
>+ | that is bundled with this package in the file LICENSE, and is |
>+ | available at through the world-wide-web at |
>+ | http://www.php.net/license/2_02.txt. |
> | If you did not receive a copy of the PHP license and are unable to |
>- | obtain it through the world-wide-web, please send a note
>to |
>- | [EMAIL PROTECTED] so we can mail you a copy
>immediately. |
>+ | obtain it through the world-wide-web, please send a note to |
>+ | [EMAIL PROTECTED] so we can mail you a copy immediately. |
> +----------------------------------------------------------------------+
>- | Author: Zeev Suraski
><[EMAIL PROTECTED]>
>|
>+ | Author: Zeev Suraski <[EMAIL PROTECTED]> |
> +----------------------------------------------------------------------+
> */
>
>@@ -131,12 +131,8 @@
> break;
> }
> if (!strcasecmp(Z_STRVAL_P(arg1),
> "extension")) { /* load function module */
>- zval copy;
>-
>- copy = *arg2;
>- zval_copy_ctor(©);
>- copy.refcount = 0;
>-
>zend_llist_add_element(&extension_lists->functions, ©);
>+ char *extension_name =
>estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
>+
>zend_llist_add_element(&extension_lists->functions, &extension_name);
> } else if (!strcasecmp(Z_STRVAL_P(arg1),
> ZEND_EXTENSION_TOKEN)) { /* load Zend extension */
> char *extension_name =
> estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
>
>@@ -153,12 +149,32 @@
> }
>
>
>+static zend_llist *php_load_extension_list = NULL;
>+
>+static void php_startup_loaded_extension_cb(void *arg){
>+ zval *extension, ret;
>+
>+ MAKE_STD_ZVAL(extension);
>+ ZVAL_STRING(extension,*((char **) arg),0);
>+ php_dl(extension, MODULE_PERSISTENT, &ret);
>+ FREE_ZVAL(extension);
>+}
>+
>+int php_startup_loaded_extensions(void)
>+{
>+ zend_llist_apply(php_load_extension_list,
>php_startup_loaded_extension_cb);
>+}
>+
> static void php_load_function_extension_cb(void *arg)
> {
>- zval *extension = (zval *) arg;
>- zval zval;
>+ char *extension = estrdup(*((char **)arg));
>
>- php_dl(extension, MODULE_PERSISTENT, &zval);
>+ if(! php_load_extension_list) {
>+
>php_load_extension_list=(zend_llist*)malloc(sizeof(zend_llist));
>+ zend_llist_init(php_load_extension_list, sizeof(char **),
>free_estring, 1);
>+ }
>+
>+ zend_llist_add_element(php_load_extension_list, &extension);
> }
>
>
>@@ -182,8 +198,17 @@
> return FAILURE;
> }
>
>- zend_llist_init(&extension_lists.engine, sizeof(zval),
>free_estring, 1);
>- zend_llist_init(&extension_lists.functions, sizeof(zval),
>ZVAL_DESTRUCTOR, 1);
>+ /* some extensions may be configured by ini entries
>+ if we would load them right away upon finding an extension
>+ entry we would have to use the config cache directly as
>+ the ini mechanism is not finaly initialized yet and we
>+ would introduce a order dependency in the ini file.
>+ to avoid this we temporarily store the extensions to
>+ be loaded in linked lists and process theese immediately
>+ *after* we have finished setting up the ini mechanism
>+ */
>+ zend_llist_init(&extension_lists.engine , sizeof(char **),
>free_estring, 1);
>+ zend_llist_init(&extension_lists.functions, sizeof(char **),
>free_estring, 1);
>
> safe_mode_state = PG(safe_mode);
> open_basedir = PG(open_basedir);
>@@ -236,9 +261,12 @@
>
> zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb,
> &extension_lists);
>
>+ /* now that we are done with the configuration settings
>+ we can load all requested extensions
>+ */
> zend_llist_apply(&extension_lists.engine,
> php_load_zend_extension_cb);
> zend_llist_apply(&extension_lists.functions,
> php_load_function_extension_cb);
>-
>+
> zend_llist_destroy(&extension_lists.engine);
> zend_llist_destroy(&extension_lists.functions);
>
>
>
>
>--
>PHP CVS Mailing List (http://www.php.net/)
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>To contact the list administrators, e-mail: [EMAIL PROTECTED]
--
Zeev Suraski <[EMAIL PROTECTED]>
CTO & co-founder, Zend Technologies Ltd. http://www.zend.com/
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]