php $_SERVER['orig_script_name']

php中文网
发布: 2016-06-23 14:36:12
原创
1177人浏览过

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

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

1、该框架无文档;

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

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

立即学习PHP免费学习笔记(深入)”;

 

豆绘AI
豆绘AI

豆绘AI是国内领先的AI绘图与设计平台,支持照片、设计、绘画的一键生成。

豆绘AI 485
查看详情 豆绘AI

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

当我看到一个处理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>
登录后复制

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

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

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

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

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

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

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

仅此为记。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号