$_SERVER[’PHP_SELF’],
$_SERVER['REQUEST_URI'], and $_SERVER[’SCRIPT_NAME’] all behave in
similar ways, they return information about what file is being
used. When exposed to some differnt scenarios, you can see in some
cases they do behave differently. This can help you decide which is
best for what you need in your script.
$_SERVER[’PHP_SELF’]
http://www.yoursite.com/example/ -- -- --
/example/index.php
http://www.yoursite.com/example/index.php -- --
-- /example/index.php
http://www.yoursite.com/example/index.php?a=test
-- -- --
/example/index.php
http://www.yoursite.com/example/index.php/dir/test
-- -- -- /dir/test
When we use $_SERVER[’PHP_SELF’]
we have the file name /example/index.php returned to us both when
we did and did not actully type it in the URL. When we appended
variables to the end of it, they where truncated and again
/example/index.php was returned. The only one that produced a
different result was when we appended directories after the file
name. In that case, it returned those directories.
$_SERVER['REQUEST_URI']
http://www.yoursite.com/example/ -- -- --
/
http://www.yoursite.com/example/index.php -- --
-- /example/index.php
http://www.yoursite.com/example/index.php?a=test
-- -- --
/example/index.php?a=test
http://www.yoursite.com/example/index.php/dir/test
-- -- --
/example/index.php/dir/test
In all of our examples, this
returned exactly what we entered for the URL. It returned a plain
/, the file name, the variables, and the appended directories, all
just as they had been entered.
$_SERVER[’SCRIPT_NAME’]
http://www.yoursite.com/example/ -- -- --
/example/index.php
http://www.yoursite.com/example/index.php -- --
-- /example/index.php
http://www.yoursite.com/example/index.php?a=test
-- -- --
/example/index.php
http://www.yoursite.com/example/index.php/dir/test
-- -- --
/example/index.php
In all cases here we were returned
only the file name /example/index.php regardless of if it was
typed, not typed, or anything was appended to it.
--------------------------------------------------------------------------------------
通常在本機測試 $_SERVER['SCRIPT_NAME'] 跟 $_SERVER['PHP_SELF']
大概看不出有什麼不同,因為大部分的PHP不是以CGI模式運行的。
但 DreamHost 上的 PHP 是以 CGI 方式運行,二者就有明顯不同的差異。
echo $_SERVER['SCRIPT_NAME']; // (/cgi-system/php.cgi)
echo $_SERVER['PHP_SELF']; // (/admin/test.php)