php $_SERVER['orig_script_name']

本文深入探讨了一个新框架的实现原理,尤其关注如何从源码出发理解其处理request的过程,包括获取基础URL的复杂逻辑。对于不熟悉框架内部机制的读者来说,这是一篇详尽的指南。

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

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

1、该框架无文档;

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

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

 

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

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

static function get_base_url(){
        $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
        if (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
            $base_url = $_SERVER['ORIG_SCRIPT_NAME']; 
        } elseif (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
            $base_url = $_SERVER['SCRIPT_NAME'];
        } elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
            $base_url = $_SERVER['PHP_SELF'];
        } else {
            $path    = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
            $file    = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';
            $segs    = explode('/', trim($file, '/'));
            $segs    = array_reverse($segs);
            $index   = 0;
            $last    = count($segs);
            $base_url = '';
            do {
                $seg = $segs[$index];
                $base_url = '/' . $seg . $base_url;
                ++$index;
            } while (($last > $index) && (false !== ($pos = strpos($path, $base_url))) && (0 != $pos));
        }
        
        $request_uri = self::get_request_uri();
        if (0 === strpos($request_uri, $base_url)) {
            return self::dirname($base_url);
        }
        if (0 === strpos($request_uri, dirname($base_url))) {
            return self::dirname($base_url);
        }
        
        $truncatedrequest_uri = $request_uri;
        if (($pos = strpos($request_uri, '?')) !== false) {
            $truncatedrequest_uri = substr($request_uri, 0, $pos);
        }
        
        $basename = basename($base_url);
        if (empty($basename) || !strpos($truncatedrequest_uri, $basename)) {
            return;
        }
        
        if ((strlen($request_uri) >= strlen($base_url))
        && ((false !== ($pos = strpos($request_uri, $base_url))) && ($pos !== 0)))  {
            $base_url = substr($request_uri, 0, $pos + strlen($base_url));
        }            
        return  rtrim(self::dirname($base_url), '/');
    }

<think>好的,用户想了解ORIG_REF_NAME的定义或用途,特别是在编程中的使用。首先,我需要查找相关的信息。根据用户提供的引用内容,引用[4]提到了tag_tref_setInputTag和移除引用集成员的参数,可能与ORIG_REF_NAME有关联。通常在软件开发中,类似ORIG_REF_NAME的变量可能用于版本控制或引用管理,比如Git中的原始引用名称。例如,在Git钩子脚本中,ORIG_HEAD、FETCH_HEAD这样的变量用于记录引用的原始状态,ORIG_REF_NAME可能类似,用来保存原始的引用名称,以便在操作后恢复或比较。不过用户提供的引用中没有直接提到ORIG_REF_NAME,可能需要进一步推测。结合引用[4]中提到的引用集操作,ORIG_REF_NAME可能是在处理引用集时用来记录原始引用名称的变量,比如在NX二次开发中管理部件或装配时的引用名称。需要确认是否有相关文档或代码示例,但根据现有信息,可以推断ORIG_REF_NAME可能用于跟踪原始引用,避免数据丢失或在回滚时使用。最后,建议用户查阅具体文档或提供更多上下文以获取准确信息。</think>在软件开发中,$ORIG\_REF\_NAME$ 常见于**版本控制系统**或**引用追踪场景**,尤其在处理分支、标签或对象引用时。例如在 Git 中,类似变量(如 `ORIG_HEAD`)用于记录操作前的原始引用状态,用于回滚或比较操作前后的差异[^4]。 ### 可能用途分析 1. **引用备份** - 在执行可能改变引用的操作前(如分支重置),$ORIG\_REF\_NAME$ 可保存原始引用名称,便于后续恢复。 - 示例代码片段: ```bash ORIG_REF_NAME=$(git symbolic-ref HEAD) # 保存当前分支名 ``` 2. **版本对比** - 通过记录操作前后的引用名,支持差异分析或日志生成。 3. **自动化脚本** - 在 CI/CD 流程中,可能通过该变量追踪代码库的原始状态。 ### 参考场景 根据引用[4]中提到的 NX 二次开发接口 `UF_WAVE_create_linked_part`,$ORIG\_REF\_NAME$ 可能用于**管理部件引用关系**,例如在装配设计中追踪原始部件引用路径,确保数据关联性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值