Re: php_module_startup: more than one additional_module impossible?
| From: | Norbert Wagner | Date: | Sun, 12 Sep 2004 18:47:23 +0000 |
| Subject: | Re: php_module_startup: more than one additional_module impossible? | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-12749@lists.php.net to get a copy of this message | ||
Hi,
thank's for your answer!
Wez Furlong wrote:
You might be right about that. The current prototype does allow this though: zend_module_entry modules[2] = { { ... first module ... }, { ... second module ... } }; php_module_startup(&sapimodule, modules, sizeof(modules)/sizeof(modules[0]));That won't work, I fear, because php_module_startup() passes &modules to php_startup_extensions(), which iterates of it the "normal" way. You need zend_module_entry** - parameter for this to work properly :-(
There are other ways to fire up additional modules dynamically; take a look at the code in ext/standard/dl.c to see how the dl() function (and "extesion=" init statement) works.I tried to call php_dl() directly, but this functions doesn't get exported. Then I tried to invoke dl() via call_user_function(), but this also failed - probably because I need a request context to do this (?). My next thought was to copy php_dl() and load the extensions by hand after php_module_startup(), but this didn't succeed, either: I saw my modules via get_loaded_extensions(), but my classes did not get registered correctly (They were simply not declared in "script-space"). Perhaps the sequence in php_module_startup() is essential here, I don't know... A solution might be to add a new php_module_startup_ex(...) function with the right parametes, and let php_module_startup() be a wrapper around it. At least this would keep existing SAPI-modules working: /* {{{ php_module_startup */ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules) {
return php_module_startup_ex(
sf, &additional_modules, num_additional_modules );
}
/* {{{ php_module_startup_ex
*/
int php_module_startup_ex(sapi_module_struct *sf, zend_module_entry **additional_modules, uint num_additional_modules)
{
/* old php_module_startup() body here */
}
What do you think?
Regards,
Norbert
--Wez. On Fri, 10 Sep 2004 22:55:18 +0200, Norbert Wagner <nw@softwarekombinat.de> wrote:Hi, I need to load more than one "additional_module" in my self-made SAPI-module. Looking around at the php/zend-API, I thought that the php_module_startup(...) function provides such functionality: int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules) But then, It looks to me that the *additional_modules - parameter is lacking an indirection: Shouldn't it be **additional_modules or *additional_modules[] instead? As long as you try to register only one additional module (which is what all the other SAPI-Modules do that I have found), everything is fine. But I'd like to register an arbitrary number of modules during startup without reading php.ini. Any Ideas? I am quite new to PHP, perhaps I have just missed the spot? Regards, Norbert -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php