I don't think I made myself exactly clear. There are 2 use cases I would like to consider: 1. CLI: by using "php /full/path/to/script.php" or "cd /full/path/to && php script.php" 2. Apache DSO: going to http://www.domain.com/script.php which in turn 'executes' script "/full/path/to/script.php"
In both cases, in RINIT I would like to get full path (real path, if possible) of this /full/path/to/script.php. Is this possible or is your way the only viable solution (with performance penalty etc)? (The $_SERVER['SCRIPT_FILENAME'] was just a method to explain what I would like to have, albeit obviously a poor one:) Thanks again, b. 2010/8/9 Johannes Schlüter <johan...@php.net> > On Mon, 2010-08-09 at 13:32 +0200, Bostjan Skufca wrote: > > Hi all! > > > > I am developing a small PHP extension and I ATM can't figure out how to > get > > to $_SERVER['SCRIPT_FILENAME'] content while in PHP_RINIT or > PHP_RSHUTDOWN > > function. Can someone please hint me with this one? > > The simple answer is: You can't. The closest you can get is a char * > SG(request_data).request_uri > > The more complex answer is: It is only stored for being used in > $_SERVER. So you can read it from there. The engine has a "just in time" > mode to avoid creating _SERVER when not needed, we need it so we first > have to trigger the creation of that variable, then one can search > through the global symbol table and then search in there: > > > zval **server, **tmp; > zend_auto_global_disable_jit("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC); > if (zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), > (void**)&server) == FAILURE || Z_TYPE_PP(server) != IS_ARRAY) { > /* error handling */ > return; > } > if (zend_hash_find(Z_ARRVAL_PP(server), "SCRIPT_FILENAME", > sizeof("SCRIPT_FILENAME"), (void**)&tmp) == FAILURE || Z_TYPE_PP(tmp) != > IS_STRING) { > /* error handling */ > return; > } > /* work with tmp */ > > As this accesses the userspace $_SERVER you should do this during RINIT, > else the value might be wrong. While this adds some cost to every > request (populating $_SERVER plus two hash lookups), it can be optimized > a tiny bit by precalculating the hash and using zend_hash_quick_find(). > > The code above is untested. > > johannes > > >