【TP5源码】获取项目的根目录
实现代码

  
   - 
    
     
    
    
     
      <?php
     
    
 
   - 
    
     
    
    
     
      namespace app\index\controller;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      class Index
     
    
 
   - 
    
     
    
    
     
      {
     
    
 
   - 
    
     
    
    
         # 获取应用根目录
     
    
 
   - 
    
     
    
    
         public function index()
     
    
 
   - 
    
     
    
    
     
          {
     
    
 
   - 
    
     
    
    
             # 这里是判断命令行执行,还是浏览器执行
     
    
 
   - 
    
     
    
    
             if ('cli' == PHP_SAPI) {
     
    
 
   - 
    
     
    
    
                 $scriptName = realpath($_SERVER['argv'][0]);
     
    
 
   - 
    
     
    
    
     
              } else {
     
    
 
   - 
    
     
    
    
                 # 获取文件的绝对路径
     
    
 
   - 
    
     
    
    
                 $scriptName = $_SERVER['SCRIPT_FILENAME'];
     
    
 
   - 
    
     
    
    
     
              }
     
    
 
   - 
    
     
    
    
             # dirname是获取目录,reapath返回绝对路径
     
    
 
   - 
    
     
    
    
             $path = realpath(dirname($scriptName));
     
    
 
   - 
    
     
    
    
             # 检测是不是文件
     
    
 
   - 
    
     
    
    
             if (!is_file($path . DIRECTORY_SEPARATOR . 'think')) {
     
    
 
   - 
    
     
    
    
                 $path = dirname($path);
     
    
 
   - 
    
     
    
    
     
              }
     
    
 
   - 
    
     
    
    
             return $path . DIRECTORY_SEPARATOR;
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
 
步骤详解
(1)分析 if ('cli' == PHP_SAPI) {
先来看这一行代码,这里有个常量是PHP_SAPI,然后进行打印出来是cgi-fcgi,所以会走else
这里会有三种情况:
nginx访问是fast-cgi
apache访问是apache2handler
命令行访问是cli
(2)执行$scriptName = $_SERVER['SCRIPT_FILENAME'];
$_SERVER['SCRIPT_FILENAME']是访问的是哪个文件,它就获取这个文件的绝对路径
打印出来的是:
C:/phpStudy/PHPTutorial/WWW/tp5.1learn/public/index.php
(3)执行$path = realpath(dirname($scriptName));
这行进行了两个操作:
dirname()函数返回路径中的目录部分。
realpath() 函数返回绝对路径。
打印结果:
dirname($scriptName):C:/phpStudy/PHPTutorial/WWW/tp5.1learn/public
realpath(dirname($scriptName)):C:\phpStudy\PHPTutorial\WWW\tp5.1learn\public
(4)执行is_file($path . DIRECTORY_SEPARATOR . 'think',
打印结果:C:\phpStudy\PHPTutorial\WWW\tp5.1learn\public\think
这一步不会执行,因为在public的目录下没有think这个目录
这里需要注意一个点就是define ('DIRECTORY_SEPARATOR', "/"),在PHP这个是定义斜杠的常量
(5)执行$path . DIRECTORY_SEPARATOR;
执行结果:C:\phpStudy\PHPTutorial\WWW\tp5.1learn\
(6)完结:这个也就是tp5.1获取项目根目录的一个完整过程
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/102487340
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)