php $_SERVER['orig_script_name']

WBOY
Release: 2016-06-23 14:36:12
Original
1091 people have browsed it

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

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

1、该框架无文档;

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

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

 

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

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

 

              <p class="sycode">                   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      }              </p>
Copy after login

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

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

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

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

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

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

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

仅此为记。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template