php $_SERVER['orig_script_name']

WBOY
Lepaskan: 2016-06-23 14:36:12
asal
1090 orang telah melayarinya

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

该框架甚是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>
Salin selepas log masuk

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

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

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

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

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

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

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

仅此为记。

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan