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

举报
原来是咔咔 发表于 2022/03/27 22:43:35 2022/03/27
【摘要】 实现代码 <?phpnamespace app\index\controller; class Index{ # 获取应用根目录 public function index() { # 这里是判断命令行执行,还是浏览器执行 if ('cli' == PHP_SAPI) { ...

实现代码


  
  1. <?php
  2. namespace app\index\controller;
  3. class Index
  4. {
  5. # 获取应用根目录
  6. public function index()
  7. {
  8. # 这里是判断命令行执行,还是浏览器执行
  9. if ('cli' == PHP_SAPI) {
  10. $scriptName = realpath($_SERVER['argv'][0]);
  11. } else {
  12. # 获取文件的绝对路径
  13. $scriptName = $_SERVER['SCRIPT_FILENAME'];
  14. }
  15. # dirname是获取目录,reapath返回绝对路径
  16. $path = realpath(dirname($scriptName));
  17. # 检测是不是文件
  18. if (!is_file($path . DIRECTORY_SEPARATOR . 'think')) {
  19. $path = dirname($path);
  20. }
  21. return $path . DIRECTORY_SEPARATOR;
  22. }
  23. }

步骤详解

(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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。