• php $_SERVER['orig_script_name']


    因为要做某项目的一个新功能,而这个新功能又是用公司新开发的框架做的。

    该框架甚是NB啊,NB到什么地方那。主要有一下几点:

    1、该框架无文档;

    2、该框架源码中无注释;

    3、除了那帮主线开发人员我们部门很少有人熟悉使用;

    如果想使用这个框架做东西,只有一条路:看源码,先了解框架的实现原理,然后再用这个鸟玩意做东西。

    当我看到一个处理request的类的时候,如下代码映入眼帘:

    1 static function get_base_url(){
    2 $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
    3 if (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
    4 $base_url = $_SERVER['ORIG_SCRIPT_NAME'];
    5 } elseif (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
    6 $base_url = $_SERVER['SCRIPT_NAME'];
    7 } elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
    8 $base_url = $_SERVER['PHP_SELF'];
    9 } else {
    10 $path = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
    11 $file = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';
    12 $segs = explode('/', trim($file, '/'));
    13 $segs = array_reverse($segs);
    14 $index = 0;
    15 $last = count($segs);
    16 $base_url = '';
    17 do {
    18 $seg = $segs[$index];
    19 $base_url = '/' . $seg . $base_url;
    20 ++$index;
    21 } while (($last > $index) && (false !== ($pos = strpos($path, $base_url))) && (0 != $pos));
    22 }
    23
    24 $request_uri = self::get_request_uri();
    25 if (0 === strpos($request_uri, $base_url)) {
    26 return self::dirname($base_url);
    27 }
    28 if (0 === strpos($request_uri, dirname($base_url))) {
    29 return self::dirname($base_url);
    30 }
    31
    32 $truncatedrequest_uri = $request_uri;
    33 if (($pos = strpos($request_uri, '?')) !== false) {
    34 $truncatedrequest_uri = substr($request_uri, 0, $pos);
    35 }
    36
    37 $basename = basename($base_url);
    38 if (empty($basename) || !strpos($truncatedrequest_uri, $basename)) {
    39 return;
    40 }
    41
    42 if ((strlen($request_uri) >= strlen($base_url))
    43 && ((false !== ($pos = strpos($request_uri, $base_url))) && ($pos !== 0))) {
    44 $base_url = substr($request_uri, 0, $pos + strlen($base_url));
    45 }
    46 return rtrim(self::dirname($base_url), '/');
    47 }

    要学的东西真是太多了,今天第一次看见$_SERVER['ORIG_SCRIPT_NAME']这个变量。做什么的?还真不清楚。

    以前我只是知道$_SERVER['SCRIPT_NAME'']这个变量。

    我一向是追根究底,有什么不清楚的,如果不弄出来,难受啊。

    用度娘搜索了下,见下面这段话:

    要知道PHP当前是通过CGI来运行,还是在Apache内部运行,可以检查一下环境变量orig_script_name。
    如果PHP通过CGI来运行,这个变量的值就是/Php/Php.exe。
    如果Apache将PHP脚本作为模块来运行,该变量的值应该是/Phptest.php
    

    这才恍然大悟啊。原来是这个原因啊。

    看样子,想把php学好,学精还要大下一番功夫啊。

    仅此为记。

  • 相关阅读:
    防窜货下加密锁使用常见问题
    SQL Server 2000/2005/2008 触发器的管理和查看
    列表显示时,部分凭证会分两行显示,且不能删除
    JDBC 连接 带实例名的SQL Server
    登录软件提示:读取数据源出现错误,pkcs7填充无效,无法被移除
    完美卸载SQL Server 2008的方案
    彻底卸载(删除)SQL server2000
    NCV5取消:授权数到达,或者许可证过期提示的秘诀
    SQL Server日志清空方法 .
    第二天 一列布局
  • 原文地址:https://www.cnblogs.com/ainiaa/p/1866871.html
Copyright © 2020-2023  润新知