实现代码

<?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. CVPR 2021 Oral | 室内动态场景中的相机重定位
  2. 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...
  3. day002--python编程的相关软件,变量
  4. hdu 2871 Memory Control(线段树)
  5. 浅谈数据结构之主席树(线段树进阶版)
  6. 离散数学期末复习概念_复习第1部分中的基本概念
  7. php pathinfo 解析,php 解析pathinfo 类
  8. 一起talk C栗子吧(第三十九回:C语言实例--创建一棵二叉树)
  9. 【读书笔记->统计学】05-02 “概率”的整体影响-随机变量的线性变换、独立观测值概念简介
  10. python运行出玫瑰花的代码_一支玫瑰 - python代码库 - 云代码
  11. 231个web前端常用的javascript特效分享
  12. http接口公网对接时用到的RSA加密/解密实现示例
  13. TypeScript基础入门之Symbols
  14. JQuery——横纵向菜单设计
  15. Windows子系统WSL
  16. 使用Glide模仿微信图片加载策略
  17. 面向对象程序设计中对抽象的理解
  18. python爬虫实现豆瓣模拟登录
  19. window安装Linux
  20. Python * ** 打包解包 详解

热门文章

  1. 001 我是天选,也是唯一!
  2. 大学抢课python脚本_两天时间挑战python实现广州大学抢课?(抢课篇)(第二次修改补充)...
  3. ACM暑假总结7.17
  4. 90 后程序员健康现状:掉头发、油腻、腰椎间盘突出……| 程序员有话说
  5. 百钱买百鸡:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?
  6. 基于FPGA的CAMERALINK解码(芯片)
  7. Mac电脑的Spotlight不显示文件和应用程序,怎么办?
  8. 史上最清晰ufo视频 土耳其新闻
  9. 【图像分割】基于meanshift实现色盲图像分割含Matlab源码
  10. PermitRootLogin 问题解决