> On 03.08.2007 14:48, Uwe Schindler wrote:
> >> How EXACTLY does the web-server put the value?
> >> To me it looks like you're using some global config file, so no wonder
> >> it's put globally.
> >
> > It is not global. The overwritten value is set only for a specific path
> (you
> > can be sure that I know how Sun Webserver works, I maintain the NSAPI
> > module... :-) ).
> >
> > The changed value then corrupts the ini entry complete. I found out why
> this
> > is so, so this is a _bug_.
> >
> > The following patch, when reverted fixes it and restores the old
> behaviour:
> >
> >
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini.c?r1=1.39.2.2.2.8&r2=1.
> 39
> > .2.2.2.9&pathrev=PHP_5_2
> 
> It's done to prevent overwriting settings set in httpd.conf (aka
> php_admin_value's).

I know how this is meant. But without the added patch, it does not corrupt
error_reporting. The problem is that your patch is not compatible to a
webserver that runs more than one request per process (a multithreaded one),
because it modifies the ini setting in a way that affects later running
threads.

I try to find a way to reproduce it in other webservers.

This is the code that NSAPI uses to modify the INI entries:
entry->param->name is the nullterminated ini key name, entry->param->value
is the nullteminated value. This code runs on every request (like in apache
a php_(admin)_value) that needs to set some specific ini-values. The server
runs only *one* process that handles all requests in its lifetime because it
is multithreaded:

if (zend_alter_ini_entry(entry->param->name, strlen(entry->param->name)+1,
 entry->param->value, strlen(entry->param->value),
 PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE)==FAILURE) {
        log_error(LOG_WARN, pblock_findval("fn", NSG(pb)), NSG(sn), NSG(rq),
"Cannot change php.ini key \"%s\" to \"%s\"", entry->param->name,
entry->param->value);
}

. It is always runned with admin "privileges" because SJSWS does not have
htaccess files. The big advantage to have the possibility to set ini values
is, that it is not server-wide you can change the call to PHP SAPI e.g. per
virtual server or URI path (see documentation of NSAPI).

Uwe

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to