# php_module_startup: more than one additional_module impossible?

- Thread: https://externals.io/message/12732
- Original archive: https://news-web.php.net/php.internals/12732
- Started by Norbert Wagner on 2004-09-10T20:55:18+00:00
- Messages: 3
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #12732 — Norbert Wagner — 2004-09-10T20:55:18+00:00

URL: https://externals.io/message/12732#12732

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

---

## #12733 — Wez Furlong — 2004-09-11T09:51:29+00:00

URL: https://externals.io/message/12732#12733 · In reply to: #12732

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

---

## #12749 — Norbert Wagner — 2004-09-12T18:47:23+00:00

URL: https://externals.io/message/12732#12749 · In reply to: #12733

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:
> 
> > […]
