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 <[EMAIL PROTECTED]> 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
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php