设为首页 收藏本站
查看: 743|回复: 0

[经验分享] php $_SERVER['orig_script_name']

[复制链接]

尚未签到

发表于 2015-8-25 10:42:01 | 显示全部楼层 |阅读模式
  因为要做某项目的一个新功能,而这个新功能又是用公司新开发的框架做的。
  该框架甚是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学好,学精还要大下一番功夫啊。
  仅此为记。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103935-1-1.html 上篇帖子: php中时间轴开发,即显示为“刚刚”、“5分钟前”、“昨天10:23”等 下篇帖子: PHP生成SQL基本操作增删查改拼接代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表