php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别

“PHP_SELF”
当前正在执行脚本的文件名,与 document root 相关。举例来说,在 URL 地址为 http://www.jb51.net/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。__FILE__ 常量包含当前(例如包含)文件的绝对路径和文件名。

“SCRIPT_NAME”
包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 包含当前文件的绝对路径和文件名(例如包含文件)。

主要的原因如像:$_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

找到更好的原因是:
今天在Dreamhost上安裝一套PHP程序時發現連接的地址都會多出一個cgi-system來,但是程序的config並沒有問題,查了查資料才發現是SCRIPT_NAME和PHP_SELF不同造成的問題。
通常在本機測試 $_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)

从http://lists.nyphp.org/pipermail/talk/2005-July/015339.html 发现了一个说明。老外说的。

SCRIPT_NAME solves all the problems mentioned
in this thread - it's just the script name, without any extra garbage
that might be tacked on by the user. PHP_SELF explicitly includes that
extra garbage, so solutions in this thread that involve stripping the
garbage off of PHP_SELF to make it safe are really, really missing the
point - just use SCRIPT_NAME instead. Please don't use FORM ACTION=”";
according to the spec, what the browser does with that is undefined, so
even if it works in current browsers, it might not work in future ones

(0)

相关推荐

  • 从PHP $_SERVER相关参数判断是否支持Rewrite模块

    如果是http://www.jb51.net/p1141.html形式的URL,可通过$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的区别来分析,最主要是如果页面是通过重定向会产生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIRECT_URL']两上参数,因此判断页面是否重定向就非常简单,只需要判断这两个值存在的情况就既可,但这只是在Apache环境下才有效. 如果是ISAPI Rewrite环

  • php $_SERVER windows系统与linux系统下的区别说明

    这是我在做企业站的过程中发现的一些区别:(仅供参考) 一.$_SERVER['SERVER_NAME']  在windows系统下,末尾是有 / 的,linux下没有/ . 可用以下方法处理 1.不论是那种系统直接全部加上 / 然后在进行替换 ,切记 ,应如此替换 str_replace('\\', '/', $fileUrl); 才可以. 2.判断是那种操作系统,使用PHP_OS,然后进行字符截取进行判断.

  • PHP中$_SERVER使用说明

    PHP编程中经常需要用到一些服务器的一些资料,特把$_SERVER的详细参数整理下,方便以后使用. $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式). $_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本.例如,"CGI/1.1". $_

  • php $_SERVER["REQUEST_URI"]获取值的通用解决方法

    复制代码 代码如下: <?php // 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案 function request_uri() { if (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } else { if (isset($_SERVER['argv'])) { $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0]; }

  • PHP中$_SERVER的详细参数与说明

    $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式). $_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本.例如,"CGI/1.1". $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称. $_SERVER[

  • php $_SERVER当前完整url的写法

    复制代码 代码如下: "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; php server函数 大全SERVER["HTTP_ACCEPT"]=*/* $_SERVER["HTTP_REFERER"]=http://localhost/lianxi/ $_SERVER["HTTP_ACCEPT_LA

  • PHP $_SERVER详解

    复制代码 代码如下: $_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 $_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] //当前用户主机名 $_SERVER['REQUEST_URI'] //URL $_SERVER['REMOTE_PORT'] //端口. $_SERVER['SERVER_NAME'] //服务器主机的名称. $_SERVER['PHP_SELF']//正在执行脚本的文件名

  • PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法

    复制代码 代码如下: <?php $magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes($_COOKIE)); @extract(daddslashes($_POST)); @extract(daddslashes($_GET)); if(!$magic_quotes_gpc) { $_FILES = daddslashes($_FILES); } daddslashes函数 复制代码 代码如下: //转译字符函数 fu

  • PHP中$_SERVER的详细参数与说明介绍

    $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式). $_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本.例如,"CGI/1.1". $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称. $_SERVER[

  • php中time()与$_SERVER[REQUEST_TIME]用法区别

    本文实例详细讲述了php中time()与$_SERVER[REQUEST_TIME]用法的区别.分享给大家供大家参考.具体分析如下: 简单的说time()与$_SERVER["REQUEST_TIME"]都是获得时间的,但time返回当前的 Unix 时间戳而$_SERVER["REQUEST_TIME"]得到请求开始时的时间戳,稍有区别. 1. time() 获取当前的系统时间戳 int time(void) : 返回当前的 Unix 时间戳 (返回自从 Unix

  • php几个预定义变量$_SERVER用法小结

    本文实例总结了php几个预定义变量$_SERVER的用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php echo 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目录,在apache的配置文件里定义:httpd.conf 比如:DocumentRoot "D:/work/php_root" echo 'httphost:'.$_SERVER['HTTP_HOST'].'<br>

随机推荐