Php self detail
背景
php 的几个 $_SERVER 变量都有自己的应用场景的,但 manual 那里写的太抽象了,最后在 stackoverflow 那里看到,通过浅显的例子,生动的比较了 PHP_SELF、PATH_INFO、SCRIPT_NAME 和 REQUEST_URI 的不同之处,简单翻译在下面,算是 mark 下来。
正文
一些展示这些变量不同之处的实际例子:
1.PHP_SELF 跟 SCRIPT_NAME 只有在请求的 url 是如下格式的时候才会不同:
http://example.com/test.php/foo/bar
[PHP_SELF] =/test.php/foo/bar
[SCRIPT_NAME] =/test.php/
(看来 PATH_INFO 只有在这种在请求文件后再追加路径的情形下才发挥了自己作用,而这个时候 $_SERVER [‘PATH_INFO’] 才有值) 注意:在低于 5.0 版本的 php 中,这会有些许不同。
2. 当请求的链接中带有查询语句的时候,REQUEST_URI 和 SCRIPT_NAME 会不一样:
http://example.com/test.php/foo/barhttp://example.com/test.php?foo=bar
[SCRIPT_NAME] => /test.php
[REQUEST_URI] => /test.php?foo=bar
- 当服务器重写规则起作用的时候 (比如我们开启了 APACHE 的 mod_rewrite 模块后),REQUEST_URI 和 SCRIPT_NAME 是不一样的:
http://example.com/test.php/foo/barhttp://example.com/test.php
[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /test2.php
4. 当用脚本处理 HTTP 错误的时候,REQUEST_URI 和 SCRIPT_NAME 会不一样。使用 Apache 命令 ErrorDocument 404 /404errror.php
http://example.com/test.php/foo/barhttp://example.com/test.php
[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /404error.php
在 IIS 服务器下,使用自定义的错误页http://example.com/test.php
[SCRIPT_NAME] => /404error.php
[REQUEST_URI] => /404error.php?404;http://example.com/test.php
原文链接: 传送门