PHP获取站点根目录

本文介绍了多种在PHP中获取网站根目录的方法,包括使用$_SERVER变量、魔术常量及正则表达式等技巧。

最简单方式:$_SERVER['DOCUMENT_ROOT'],暴力通俗易懂,网站根目录,GG.

将下面的代码放在网站根目录下的一个文件中,以便在其它文件中引用。

路径方式:

define('BASE_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/'))."/");

echo BASE_PATH;

 

输出结果:E:/wwwroot/

 

url方式:

$PHP_SELF=$_SERVER['PHP_SELF'];

$url='http://'.$_SERVER['HTTP_HOST'].substr($PHP_SELF,0,strrpos($PHP_SELF,'/')+1);

echo $url;

 

输出结果:http://localhost/
 

 
其它的资料整理:
 

PHP取得站点根目录

 

echo $_SERVER['HTTP_HOST'];//当前请求的 Host: 头部的内容 即域名信信息

echo $_SERVER['PHP_SELF'];//当前正在执行脚本的文件相对网站根目录地址,就算该文件被其他文件引用也可以正确得到地址

 

echo $_SERVER['SCRIPT_NAME'];//当前正在执行脚本的文件相对网站根目录地址,但当该文件被其他文件引用时,只显示引用文件的相对地址,不显示该被引用脚本的相对地址。

 

echo $_SERVER['DOCUMENT_ROOT'];//网站相对服务器地址即网站的绝对路径名 #当前运行脚本所在的文档根目录。在服务器配置文件中定义

 

echo $_SERVER['SCRIPT_FILENAME'];//当前执行脚本的绝对路径名。

 

方法一:

 

今天讲了大致的站点目录结构,其中说到了怎样取得站点根目录,好多同学不是很理解,下面一步一步道来:

 

我的站点目录据对路径:D:\www\message2011,测试文件路径:D:\www\message2011\include\config.inc.php

 

在根目录下新建一个文件,也可以隔一层目录创建,就以上面为例,我要在config.inc.php中取得站点的根目录。

 

1、取得当前文件的路径:用魔术常量__FILE__。这里的路径包含了文件名,结果如下:

 

D:\www\message2011\include\config.inc.php

 

2、去掉上面路径的文件名,得到纯路径:dirname(__FILE__),结果如下:

 

D:\www\message2011\include

 

3、返回一层目录到根目录:realpath(dirname(__FILE__).'/../'),结果如下:

 

D:\www\message2011

 

4、把向左的”\“转化成向右的”/“:str_replace( '\\' , '/' , realpath(dirname(__FILE__).'/../')),结果如下:

 

D:/www/message2011

 

到这就是我们想要的站点根目录了,可以根据需求设定第三步返回目录层数,比如:返回2层就是 /../../,那么就会得到 D:\www\,以此类推。

 

方法二:

 

在global.inc   里定义根目录

 

define("APP_ROOT",dirname(__FILE__));

 

在任何PHP文件中可以引用该常量

 

require_once(APP_ROOT."/inc/head.php");

 

 

方法三:

 

<?php

 

$PHP_SELF=$_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

 

$url='http://'.$_SERVER['HTTP_HOST'].substr($PHP_SELF,0,strrpos($PHP_SELF, '/')+1);

 

echo $url;

 

方法四:

 

$basepath=$_SERVER['PHP_SELF'];

 

$basepath=substr($basepath,0,strpos($basepath,"文件夹名称"));

 

echo $basepath;

 

如:你把文件保存为a.php并路径为:/wjj/wjj1/wjj2/a.php

 

上面的例子就写成:

 

$basepath=$_SERVER['PHP_SELF'];

 

$basepath=substr($basepath,0,strpos($basepath,"wjj1"));

 

echo $basepath;

 

方法五:

 

$basepath=$_SERVER['PHP_SELF'];

 

preg_match("/(\/)?([^\/]+)/",$basepath,$wjm);

 

echo $wjm[0];

 

转载于:https://www.cnblogs.com/jjxhp/p/10245107.html

<think> 我们参考了多个引用,其中引用[1]、[2]、[3]提供了原生PHP获取项目根目录的方法,引用[4]则提供了ThinkPHP5.1框架下的方法。 用户的问题是如何使用PHP获取项目根目录路径,因此我们主要关注原生PHP的方法(引用[1][2][3])和ThinkPHP框架的方法(引用[4])。 在原生PHP中,我们可以通过以下几种方式获取项目根目录: 1. 使用`__FILE__`魔术常量获取当前文件的绝对路径,然后通过`dirname()`函数向上回退目录层数。 例如:`dirname(__FILE__)`得到当前文件所在目录,`dirname(dirname(__FILE__))`得到上一级目录(如果当前文件在子目录中,则可能是项目的根目录)。 2. 使用`realpath()`函数获取绝对路径,并结合`__FILE__`和字符串连接来指定回退的目录层数。 例如:`realpath(dirname(__FILE__).'/../')` 将得到当前文件所在目录的上一级目录。 3. 使用`$_SERVER['DOCUMENT_ROOT']`获取网站根目录(即虚拟主机配置的根目录),但注意这可能不是项目的根目录,特别是当项目部署在子目录时。 另外,引用[3]提供了一种获取基本URL(包括协议、域名、端口和路径)的方法,但用户问的是路径(目录),所以我们主要关注目录路径。 对于ThinkPHP5.1框架,引用[4]中提到使用`Env::get('root_path')`来获取项目的根目录路径。 因此,我们将分两部分回答:原生PHP方法和ThinkPHP框架方法。 同时,根据用户要求,生成相关问题。 注意:用户要求使用中文回答,行内公式使用$...$,独立公式单独成段(但本问题不涉及数学公式,故忽略),在回答中引用的段落末尾添加引用标识。 </think>在 PHP获取项目根目录路径有以下常用方法,根据运行环境选择合适方案: ### 🛠 原生 PHP 方法 1. **`__FILE__` + `dirname()`(推荐)** 通过当前文件路径向上回退目录层级: ```php // 回退两级目录(适用于 admin/index.php 等子目录场景) $rootPath = dirname(__DIR__); // PHP 5.3+ // 或显式指定层级 $rootPath = dirname(dirname(__FILE__)); ``` 2. **`realpath()` 处理路径** 规范化路径并解析符号链接: ```php $rootPath = realpath(dirname(__FILE__) . '/../'); ``` 3. **服务器变量 `$_SERVER['DOCUMENT_ROOT']`** 直接获取 Web 服务器配置的根目录: ```php $rootPath = $_SERVER['DOCUMENT_ROOT']; ``` > ⚠️ 注意:若项目部署在子目录(如 `example.com/project/`),需拼接子目录路径[^1][^2]。 --- ### 🎯 ThinkPHP 框架方法(5.1+版本) 使用框架内置的 `Env` 门面类: ```php use think\facade\Env; $rootPath = Env::get('root_path'); // 获取项目根目录 ``` 框架路径常量对照表: | 5.0 常量 | 5.1+ 替代方法 | |---------------|-----------------------| | `ROOT_PATH` | `Env::get('root_path')` | | `APP_PATH` | `Env::get('app_path')` | | `RUNTIME_PATH`| `Env::get('runtime_path')`[^4] | --- ### 💡 实践建议 1. **子目录部署场景** 若项目在 `public_html/project/`,推荐组合使用: ```php $rootPath = $_SERVER['DOCUMENT_ROOT'] . '/project/'; ``` 2. **路径格式化** 统一斜杠避免系统差异: ```php $rootPath = str_replace('\\', '/', $rootPath); ``` 3. **动态计算基准 URL**(参考引用[3]) ```php $protocol = ($_SERVER['HTTPS'] ?? 'off') === 'on' ? 'https' : 'http'; $baseUrl = $protocol . '://' . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', $rootPath); ``` > 示例输出:`D:/phpstudy_pro/WWW/123/` 或 `/var/www/project/`[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值