PHP如何获取当前文件与URL路径
编辑:本站更新:2025-01-07 09:24:05人气:9730
在 PHP 开发过程中,理解和正确获取当前脚本的文件和 URL 路径是至关重要的。这不仅有助于构建动态内容、实现页面重定向或包含其他资源(如 CSS 和 JavaScript 文件),还能确保应用程序具有良好的可移植性和灵活性。下面将详细阐述多种方法来通过 PHP 获取这些关键信息。
1. **获取当前执行脚本的绝对路径: `__FILE__`**
在 PHP 中,内置常量 '__FILE__' 用于返回当前正在被执行的 PHP 脚本的完整服务器端物理路径及文件名:
echo __FILE__;
这将会输出类似 "/var/www/html/mysite/index.php" 的字符串,具体取决于你的网站根目录结构以及运行该脚本的具体位置。
2. **获得相对路径到根目录:**
如果需要得到相对于 Web 根目录(`DOCUMENT_ROOT`)的当前文件所在的位置,则可以结合上述 `'__FILE__'` 常量与其他函数使用,例如 'dirname()' 来剥离出父级目录,并利用 realpath() 函数将其转换为规范化的绝对路径:
$relativePath = dirname(__DIR__);
// 或者直接从文档根开始计算:
$rootRelativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(__FILE__));
3. **获取请求 URI (统一资源标识符):`$_SERVER[]`数组**
- 请求URI(不包括域名部分),可以通过以下方式取得:
$requestUriWithoutQueryString = $_SERVER['REQUEST_URI'];
// 若需排除查询参数,在某些情况下可能还需进一步处理如下:
if (($pos = strpos($requestUriWithoutQueryString, '?')) !== false){
$requestUriWithoutQueryString = substr($requestUriWithoutQueryString, 0, $pos);
}
- 完整URL可通过组合多个 server 变量进行构造,比如主机名称 (`HTTP_HOST`) 加上 REQUEST_URI。
$currentUrlWithQuerystring = "http://" . @$_SERVER["HTTPS"] == "on" ? "s" : ""
."://".$_SERVER['HTTP_HOST']
. htmlspecialchars_decode(rawurldecode(@$_SERVER['REQUEST_URI']));
4. **提取基础 URL (Schema + Host):**
对于只获取基本网址(协议+hostname部分),我们可以这样做:
$baseUrl = (@$_SERVER['HTTPS'])?'https':'http';
$baseHost = ($_SERVER['HTTP_X_FORWARDED_PROTO'])?$_SERVER['HTTP_X_FORWARDED_PROTO'].'://'.$_SERVER['HTTP_HOST']:((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'off')?('http://' ):'').$_SERVER['HTTP_HOST'];
$basePath = "$baseUrl$baseHost";
5. **解析 PATH_INFO:**
当 Apache 配置启用了 AcceptPathInfo 模块时,PATH_INFO可以从 SERVER变量中读取以识别额外基于路由的信息:
$pathInfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
总的来说,PHP 提供了丰富的方法和全局变量帮助开发者准确地确定并操作当前位置相关的各类路径。理解其工作原理并在实际项目开发中有针对性的应用能极大提高代码质量与程序效率。同时,请注意由于不同Web服务环境可能会导致以上提到的部分Server变量有所不同,因此务必对所处部署环境有清晰认知以便选择正确的方案实施。
1. **获取当前执行脚本的绝对路径: `__FILE__`**
在 PHP 中,内置常量 '__FILE__' 用于返回当前正在被执行的 PHP 脚本的完整服务器端物理路径及文件名:
php
echo __FILE__;
这将会输出类似 "/var/www/html/mysite/index.php" 的字符串,具体取决于你的网站根目录结构以及运行该脚本的具体位置。
2. **获得相对路径到根目录:**
如果需要得到相对于 Web 根目录(`DOCUMENT_ROOT`)的当前文件所在的位置,则可以结合上述 `'__FILE__'` 常量与其他函数使用,例如 'dirname()' 来剥离出父级目录,并利用 realpath() 函数将其转换为规范化的绝对路径:
php
$relativePath = dirname(__DIR__);
// 或者直接从文档根开始计算:
$rootRelativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(__FILE__));
3. **获取请求 URI (统一资源标识符):`$_SERVER[]`数组**
- 请求URI(不包括域名部分),可以通过以下方式取得:
php
$requestUriWithoutQueryString = $_SERVER['REQUEST_URI'];
// 若需排除查询参数,在某些情况下可能还需进一步处理如下:
if (($pos = strpos($requestUriWithoutQueryString, '?')) !== false){
$requestUriWithoutQueryString = substr($requestUriWithoutQueryString, 0, $pos);
}
- 完整URL可通过组合多个 server 变量进行构造,比如主机名称 (`HTTP_HOST`) 加上 REQUEST_URI。
php
$currentUrlWithQuerystring = "http://" . @$_SERVER["HTTPS"] == "on" ? "s" : ""
."://".$_SERVER['HTTP_HOST']
. htmlspecialchars_decode(rawurldecode(@$_SERVER['REQUEST_URI']));
4. **提取基础 URL (Schema + Host):**
对于只获取基本网址(协议+hostname部分),我们可以这样做:
php
$baseUrl = (@$_SERVER['HTTPS'])?'https':'http';
$baseHost = ($_SERVER['HTTP_X_FORWARDED_PROTO'])?$_SERVER['HTTP_X_FORWARDED_PROTO'].'://'.$_SERVER['HTTP_HOST']:((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'off')?('http://' ):'').$_SERVER['HTTP_HOST'];
$basePath = "$baseUrl$baseHost";
5. **解析 PATH_INFO:**
当 Apache 配置启用了 AcceptPathInfo 模块时,PATH_INFO可以从 SERVER变量中读取以识别额外基于路由的信息:
php
$pathInfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
总的来说,PHP 提供了丰富的方法和全局变量帮助开发者准确地确定并操作当前位置相关的各类路径。理解其工作原理并在实际项目开发中有针对性的应用能极大提高代码质量与程序效率。同时,请注意由于不同Web服务环境可能会导致以上提到的部分Server变量有所不同,因此务必对所处部署环境有清晰认知以便选择正确的方案实施。
www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源
PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。