Well, I'm (almost) sure that without making use of the $_SERVER
superglobal keys, providing a alternative way to figure out PATH_INFO
is just impossible, that being said lets first list all of the $_SERVER keys that we may possibly use:
- 'PHP_SELF'
- 'QUERY_STRING'
- 'SCRIPT_FILENAME'
- 'PATH_TRANSLATED'
- 'SCRIPT_NAME'
- 'REQUEST_URI'
- 'PATH_INFO'
- 'ORIG_PATH_INFO'
We obviously need to ignore the last two. Now we should (I don't know this for a fact, I'm just assuming because you said so) filter all the keys that exist in the link you provided (which BTW is offline ATM), that leaves us with the following keys:
- 'PHP_SELF'
- 'SCRIPT_FILENAME'
- 'REQUEST_URI'
Regarding your comment to Anthonys answer:
You are just juggling variables now.
SCRIPT_FILENAME
is a part of the CGI
spec. It will not be available if
PATH_INFO
is unavailable. As for
REQUEST_URI
, it's apache's mod_rewrite
specific. – LiraNuna
I'm running LightTPD/1.4.20-1 (Win32) with PHP 5.3.0 as CGI, cgi.fix_pathinfo = 1
and $_SERVER['REQUEST_URI']
is very available to me, I also remember using that same variable back in the days when no one used mod_rewrite
so my honest humble guess is that you're plain wrong in this point. Regarding the SCRIPT_FILENAME
key I'm unable to test that one out ATM. Still, if we close our eyes really hard and believe that you're right that leaves us with only one variable:
I'm not trying in being harsh here (and I still believe that there are more solutions) but if PHP_SELF
is the only key you want us to work with (assuming there are no impositions on PHP_SELF
itself) there is only one solution left:
function PATH_INFO()
{
if (array_key_exists('PATH_INFO', $_SERVER) === true)
{
return $_SERVER['PATH_INFO'];
}
$whatToUse = basename(__FILE__); // see below
return substr($_SERVER['PHP_SELF'], strpos($_SERVER['PHP_SELF'], $whatToUse) + strlen($whatToUse));
}
This function should work, however there may be some problems using the __FILE__
constant since it returns the path to the file where the __FILE__
constant is declared and not the path to the requested PHP script, so that's why the $whatToUse is there for: sou you can replace it with 'SCRIPT_FILENAME'
or if you really believe in what you are saying, just use '.php'
.
You should also read this regarding why not to use PHP_SELF
.
If this doesn't work for you, I'm sorry but I can think of anything else.
EDIT - Some more reading for you:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…