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
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]));
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.
--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
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 thedl()
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