zoukankan      html  css  js  c++  java
  • 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学好,学精还要大下一番功夫啊。

    仅此为记。

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/ainiaa/p/1866871.html
Copyright © 2011-2022 走看看