X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fglobal.php;h=e7325e5d276a4324c25ee5e5e45c0639446596c4;hp=5c9f497f9ee08c0f092232717ac371053dcfacc8;hb=53901c7bc984082496cdd2415ae66e967fee45b8;hpb=d0e7f324898b4eaf7786c1c4cadcc12e97e2756f diff --git a/functions/global.php b/functions/global.php index 5c9f497f..e7325e5d 100644 --- a/functions/global.php +++ b/functions/global.php @@ -7,7 +7,7 @@ * It also has some session register functions that work across various * php versions. * - * @copyright 1999-2009 The SquirrelMail Project Team + * @copyright 1999-2010 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -670,32 +670,56 @@ if (!function_exists('session_regenerate_id')) { /** * php_self * - * Creates an URL for the page calling this function, using either the PHP global - * REQUEST_URI, or the PHP global PHP_SELF with QUERY_STRING added. Before 1.5.1 - * function was stored in function/strings.php. + * Attempts to determine the path and filename and any arguments + * for the currently executing script. This is usually found in + * $_SERVER['REQUEST_URI'], but some environments may differ, so + * this function tries to standardize this value. + * + * Note that before SquirrelMail version 1.5.1, this function was + * stored in function/strings.php. * - * @return string the complete url for this page * @since 1.2.3 + * @return string The path, filename and any arguments for the + * current script */ -function php_self () { - // PHP 4.4.4 apparently gives the wrong value here - missing the query string - // this code is commented out in the 1.4.x code, so we'll do the same here - //if ( sqgetGlobalVar('REQUEST_URI', $req_uri, SQ_SERVER) && !empty($req_uri) ) { - // return $req_uri; - //} +function php_self() { - if ( sqgetGlobalVar('PHP_SELF', $php_self, SQ_SERVER) && !empty($php_self) ) { + $request_uri = ''; - // need to add query string to end of PHP_SELF to match REQUEST_URI - // - if ( sqgetGlobalVar('QUERY_STRING', $query_string, SQ_SERVER) && !empty($query_string) ) { - $php_self .= '?' . $query_string; - } + // first try $_SERVER['PHP_SELF'], which seems most reliable + // (albeit it usually won't include the query string) + // + $request_uri = ''; + if (!sqgetGlobalVar('PHP_SELF', $request_uri, SQ_SERVER) + || empty($request_uri)) { + + // well, then let's try $_SERVER['REQUEST_URI'] + // + $request_uri = ''; + if (!sqgetGlobalVar('REQUEST_URI', $request_uri, SQ_SERVER) + || empty($request_uri)) { + + // TODO: anyone have any other ideas? maybe $_SERVER['SCRIPT_NAME']??? + // + return ''; + } - return $php_self; } - return ''; + // we may or may not have any query arguments, depending on + // which environment variable was used above, and the PHP + // version, etc., so let's check for it now + // + $query_string = ''; + if (strpos($request_uri, '?') === FALSE + && sqgetGlobalVar('QUERY_STRING', $query_string, SQ_SERVER) + && !empty($query_string)) { + + $request_uri .= '?' . $query_string; + } + + return $request_uri; + }