Re: Best way to access $_SERVER variables from c?

From: Date: Tue, 21 Nov 2006 01:58:51 +0000
Subject: Re: Best way to access $_SERVER variables from c?
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-26690@lists.php.net to get a copy of this message
ok, worked it out - after a day and a half of trying to get it working, it hits me just after I post! Didn't realize the values were coming back as php hashes. For future newbie reference, here's the working code: zval **server_name = NULL; char* lookup_server_name; if (strcmp(basedir, "VIRTUAL_DOCUMENT_ROOT") == 0) { if (!PG(http_globals)[TRACK_VARS_SERVER] || zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "SERVER_NAME", sizeof("SERVER_NAME"), (void **) &server_name) == FAILURE) { // Unable to find server name php_error_docref(NULL TSRMLS_CC, E_WARNING, "SERVER_NAME variable is not set, cannot determine server name."); return 0; } else { // Convert the hash to a string convert_to_string_ex(server_name); // Convert the hash value to a char* for c processing lookup_server_name = estrndup(Z_STRVAL_PP(server_name), Z_STRLEN_PP(server_name)); // Non-zero result, error occured php_error_docref(NULL TSRMLS_CC, E_WARNING, "Base directory: %s, %s, %s", basedir, path, lookup_server_name); return 0; } } Glenn Richmond wrote: > Hi All, > > I apologize if this is an extremely straight-forward question, but I'm > trying to access the SERVER_NAME variable from PHP source (a tweak to > protect against accessing disallowed directory paths in a shared > environment without enabling safe mode). I've got the following code: > > if > (zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, > "SERVER_NAME", sizeof("SERVER_NAME"), (void **) &server_name) != > FAILURE) { > // Got server name > php_error_docref(NULL TSRMLS_CC, E_WARNING, "Base directory: > %s, %s, %s", basedir, path, server_name); > return 0; > } else { > // Unable to find server name > php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find > server_name hash."); > return 0; > } > > > However, the value that is reported as SERVER_NAME appears to be > giberish (the call succeeds, but the value doesn't make sense). I'm > getting "lEÊ·èEÊ·EÊ·" for the value of the server name. Any idea what > is going on here? I've also tried the get_env function without success, > but I'm guessing this is only valid when running as a CGI script as > opposed to mod_php5. > > Note that I'm just using the php_error_docref as debugging output at > this point. > > Regards, > > Glenn. > >

« previous php.internals (#26690) next »