实现代码

<?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获取项目根目录的一个完整过程

【TP5源码】获取项目的根目录相关推荐

  1. 【甄选靶场】Vulnhub百个项目渗透——项目十六:FristiLeaks_1.3(文件上传,py脚本改写,sudo提权,脏牛提权,源码获取)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十六:FristiLeaks_1.3(文件上传,py脚本改写,sudo提权,脏牛提权,源码获取) 靶场地址

  2. <漫漫Android路>AOSP源码获取编译及问题处理

    漫漫Android路---1.AOSP源码获取编译及导入 写在前面 环境准备 AOSP源码获取 1.Repo下载配置 2.Git安装及配置 3.AOSP获取 AOSP源码编译 1.安装编译依赖 2.开 ...

  3. 华为云14天鸿蒙设备开发-Day1源码获取

    目录 前言 一.获取源码 1.源码获取方式 1.1 从镜像站点获取 1.2 从HPM网站组件式获取 1.3 用包管理器命令行获取 1.4从代码仓库获取 二.在Windows中打开工程源码 1.映射工程 ...

  4. Django基于用户画像的电影推荐系统源码(项目源代码)

    一.项目介绍 公众号:yk 坤帝 获取全部源代码 本系统是以Django作为基础框架,采用MTV模式,数据库使用MongoDB.MySQL和Redis,以从豆瓣平台爬取的电影数据作为基础数据源,主要基 ...

  5. php5.5n的redis,TP5源码 Redis操作便捷类库

    # TP5源码 Redis操作便捷类库 > app\base\controller\Redis ~~~ /** * Created by PhpStorm. * Power by Mikkle ...

  6. 鸿蒙Hi3861学习十九-DevEco Device Tool源码获取、编译、下载

    一.简介 在上一篇文章中,已经讲述了如何在Windows通过Remote SSH远程连接Linux下的DevEco Device Tool.这篇文章,来说一下关于源码的获取.编译与下载.建议先按照上一 ...

  7. 教务管理系统(免费源码获取)

    项目介绍 本系统使用springboot,mybatis-plus,shiro,lombok等技术,使用json传递数据 使用加盐加密对数据进行保存,前端页面使用vue搭建并打包放在static文件夹 ...

  8. 【MATLAB第9期】基于MATLAB的xgboost算法安装超详细教学(踩坑避雷指南)暂时仅限于Windows系统 #末尾含源码获取链接

    1.前言 网上基于MATLAB的xgboost源码资源太少了,而且找到的工具箱还不能立马用,对新手不太友好,接下来我将研究捣鼓半天的成果和经验分享给大家. 2.安装具备条件 1.有matlab软件,版 ...

  9. 网站源码下载项目,小白简单搬运月入1w+

    大家好,我是小程序发课共享资料库. 有个粉丝问我,我的小程序的后台的网站怎么搭建的,看着网站美化做的不错,问我怎么设计的?还问我是不是设计出身? 我说我不会设计网站,无非用的wp主题,现成的源码. 认 ...

  10. 基于springboot+bootstrap+thymeleaf的物联网一站式宠物管理平台(领养、救助、商城)设计 毕业论文+用户手册+源码清单+项目源码及数据库文件

    下载:https://download.csdn.net/download/m0_66682818/77957797 项目介绍: 基于springboot+bootstrap+thymeleaf的物联 ...

最新文章

  1. iOS下的类似Android的toast提示
  2. Delphi-网络编程-UDP聊天程序(转)
  3. java返回json ajax_Spring MVC 中 AJAX请求并返回JSON的示例
  4. JVM基于栈的解释器执行原理
  5. 使用PowerDbg自动化Windbg调试过程
  6. FFMPEG结构体分析之AVCodec
  7. mongodb数据库中插入数据
  8. beta:scrum5
  9. static关键字 void和void指针 函数指针
  10. CSS3实现圆角效果
  11. mysql编译gcov_Mysql 编译参数详解
  12. 大数据BI可视化软件在企业的应用
  13. Android实战开发小米主题下载工具
  14. C语言bmp转JPEG不用库函数,C++图片格式转换:BMP转JPEG
  15. 【2021 ICPC Gran Premio de Mexico 2da Fecha F】Flipped Factorization 题解
  16. 【论】Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach
  17. 十年磨一剑,剑出荡魑魅
  18. 23种设计模式分析(4):结构型模式
  19. Visual Studio2019下载安装
  20. 互联网金融产品实战——安全开发篇

热门文章

  1. N²logN和NlogN​​²具有相同的增长速度
  2. Arcgis engine 10.2 面积分割 比例分割 等份分割
  3. [渝粤教育] 中南财经政法大学 生活中的管理会计 参考 资料
  4. Android播放器的三种实现方法
  5. ESXI6.7 windows虚拟机 取消Vmware Tools分辨率自适应/固定分辨率
  6. SDN(Software Defined Network):软件定义网络
  7. windows10隐藏分区(隐藏efi系统分区)
  8. 腾讯云linux装mysql_Linux腾讯云下安装mysql
  9. Echarts数据可视化2
  10. java毕业设计大学生互动交流论坛Mybatis+系统+数据库+调试部署