Re: RESEND : Fix for $DOCUMENT_ROOT in ISAPI module for IIS servers on Windows system

From: Date: Wed, 04 Oct 2000 20:10:49 +0000
Subject: Re: RESEND : Fix for $DOCUMENT_ROOT in ISAPI module for IIS servers on Windows system
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-34257@lists.php.net to get a copy of this message
Is this still a problem? Has this been fixed? Andi At 01:19 PM 8/4/00 -0400, Comeau, Michel wrote:
Hello everyone,
        I'm resending this fix since no-one seems to be taking care of entering it
in the CVS and i personnaly can't do it. There was a small mistake i made so use this one instead of the previous one. Can someone check this fix and enter it in CVS please ? If there are issues just contact me. darkwing@videotron.ca
        This is my first Fix submission and i'm sure its not a big deal. The reason
i mention it is that i believe that this fix should be checked carefully as i am very new to the OSS and PHP environments.
        I took the time to verify with a unix/apache user and when he echoes
$DOCUMENT_ROOT, it's reporting the root of the virtual folder he is in.
        The fix should probably apply to PWS too but i havent verified it since i
don't have any PWS installed here. I also cannot garantee that i'm using the correct fonctions but it seems to work for me. Feel free to fix whatever mistake i may have made. Specs & Test Case: NT4 SP5 server on local intranet with TCP/IP. IIS4 with 2 webs on 2 different IP's. (168.192.0.11 & 168.192.0.12) Web1 is HELPER located in d:\wwwroot Web2 is SHOPPER located in d:\wwwshop I have entries in LMHOSTS on remote Win2K to identify both. created /test.php in both webs containing : <? echo $DOCUMENT_ROOT; ?> the current output is : nothing, blank, nada, niet, white screen of emptyness for both webs :-) with the fix, the output is : for http://helper/test.php : d:\\wwwroot\\ for http://shopper/testp.php : d:\\wwwshop\\ HOW I FIXED IT: After having done lots of research in the code and trying to figure out where $DOCUMENT_ROOT was defined kinda showed me it was not defined properly. I still can't figure out where it was defined/initialized in the 4.0.1pl2 source code. It seemed to only be define for the CGI version of PHP. I've also taken the time to verify how apache server were handling $DOCUMENT_ROOT by having a IRC user run my test scripts on his server with 2 different subwebs and he got the expected result. Meaning 2 different system paths. THE SOURCE CHANGE: I have changed only 1 file to achieve my results: sapi/isapi/php4isapi.c remember that i changed 4.0.1pl2 version of it. function : sapi_isapi_register_server_variables() ... around line 307 ----------------------------------------------------------------------- static void sapi_isapi_register_server_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) {
        char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE];
        char *variable_buf;
        DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE;
        char *variable;
        char *strtok_buf = NULL;
        LPEXTENSION_CONTROL_BLOCK lpECB;
        char **p = isapi_server_variables;
        lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
... ... ...
        variable = php_strtok_r(variable_buf, "\r\n", &strtok_buf);
        while (variable) {
                char *colon = strchr(variable, ':');
                if (colon) {
                        char *value = colon+1;
                        while (*value==' ') {
                                value++;
                        }
                        *colon = 0;
                        php_register_variable(variable, value, track_vars_array ELS_CC PLS_CC);
                        *colon = ':';
                }
                variable = php_strtok_r(NULL, "\r\n", &strtok_buf);
        }
---------------- MY NEW CODE ------------- #ifdef PHP_WIN32
        {
        HSE_URL_MAPEX_INFO humi;
        DWORD plen = 1;
                if (lpECB->ServerSupportFunction(lpECB->ConnID,
HSE_REQ_MAP_URL_TO_PATH_EX, "/", &plen, (LPDWORD) &humi))
                {
                        // Remove trailing \
                        humi.lpszPath[strlen(humi.lpszPath) - 1] = '\0';
                        php_register_variable("DOCUMENT_ROOT", humi.lpszPath, track_vars_array
ELS_CC PLS_CC);
                }
        }
#endif --------------- END OF MY CODE -------------
        if (variable_buf!=static_variable_buf) {
                efree(variable_buf);
        }
} ----------------------------------------------------------------------- Regards, DarkByte -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net For additional commands, e-mail: php-dev-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net
--- Andi Gutmans <andi@zend.com> http://www.zend.com/

« previous php.dev (#34257) next »