Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
php如何获取当前脚本的文件路径?PHP获取脚本路径常量与函数_创想鸟

php如何获取当前脚本的文件路径?PHP获取脚本路径常量与函数

获取PHP当前脚本路径首选__FILE__和$_SERVER[‘SCRIPT_FILENAME’],前者返回当前文件的绝对路径,后者指向入口脚本,适用于确定应用根目录。

php如何获取当前脚本的文件路径?php获取脚本路径常量与函数

PHP获取当前脚本的文件路径,主要依赖于几个内置的常量和

$_SERVER

超全局变量。它们各有侧重,理解其细微差别能帮助我们更准确地定位文件,尤其在构建复杂应用时,这可不是小事。通常,

__FILE__

常量和

$_SERVER['SCRIPT_FILENAME']

是最直接的选择,但它们的行为在特定场景下会有所不同,值得我们深思。

解决方案

要获取PHP当前脚本的文件路径,我们有多种手段,每种都有其独特的使用场景和考量。

1.

__FILE__

常量:这是我个人最常使用的。

__FILE__

会返回当前文件(即包含

__FILE__

这行代码的文件)的完整路径和文件名。它是一个魔术常量,在编译时就会被替换为实际值。


其优点在于,无论文件被如何包含或从何处执行,它始终指向自身。结合

dirname(__FILE__)

,我们可以轻松获取当前文件所在的目录。

2.

$_SERVER['SCRIPT_FILENAME']

:这个变量提供了被Web服务器执行的入口脚本的绝对路径。


它反映的是整个请求的起点,对于确定应用程序的根目录非常有用。

立即学习“PHP免费学习笔记(深入)”;

3.

$_SERVER['PHP_SELF']

:这个变量返回当前执行脚本相对于文档根目录的路径。它不包含域名,也不包含绝对文件系统路径。


它常用于表单的

action

属性或构建URL,但不能直接用于文件系统操作。

4.

dirname()

和

basename()

函数:这两个函数与

__FILE__

或

$_SERVER

变量结合使用,能帮助我们进一步处理路径。

dirname(path)

:返回路径中的目录部分。

basename(path)

:返回路径中的文件名部分。


5.

getcwd()

函数:这个函数返回当前PHP脚本的当前工作目录(Current Working Directory)。这通常是脚本被执行的目录,或者在Web服务器环境下,是Web服务器的根目录或入口脚本所在的目录。


需要注意的是,

getcwd()

可能与脚本实际所在目录不同,特别是当脚本通过

include

或

require

从另一个目录被调用时。

__FILE__

与

$_SERVER['SCRIPT_FILENAME']

在文件包含中的差异解析

这是一个经常让人感到困惑的地方,也是理解PHP路径处理的关键。我个人在处理模块化应用时,曾因为对这两者的理解不到位而遇到过一些路径问题。简单来说,它们的核心区别在于“谁”被执行和“谁”是当前文件。

__FILE__

总是指向它自身所在的那个物理文件。如果你有一个

index.php

文件,它

require 'config/database.php'

,那么在

index.php

中,

__FILE__

就是

/path/to/index.php

。而在

database.php

文件中,

__FILE__

就是

/path/to/config/database.php

。这让

__FILE__

在构建相对路径时非常有用,比如

dirname(__FILE__) . '/../templates'

,这样无论

database.php

被包含在哪里,它都能正确地找到

templates

目录。它提供了一种“自知之明”的能力。

而

$_SERVER['SCRIPT_FILENAME']

则不同,它始终指向最初被Web服务器或CLI解释器执行的那个“入口”脚本。在上面的例子中,无论你是在

index.php

里打印

$_SERVER['SCRIPT_FILENAME']

,还是在被

index.php

包含的

database.php

里打印,结果都会是

/path/to/index.php

。它代表了整个请求的起点,是应用层面的“根”。

所以,当你需要知道当前代码块所在的具体文件位置时,

__FILE__

是首选。而当你需要获取整个应用程序的入口文件路径,例如用于定义全局的根目录常量时,

$_SERVER['SCRIPT_FILENAME']

则更为合适。混淆这两者,就可能导致文件找不到,或者加载了错误的配置文件。

安全地构建基于脚本路径的绝对路径的最佳实践

在实际开发中,尤其是在处理文件系统操作时,构建绝对路径是家常便饭。但如果处理不当,不仅可能导致路径错误,甚至会引入安全漏洞。我见过太多硬编码斜杠导致跨平台问题,或者没有正确处理符号链接导致路径混乱的案例。

一个非常推荐的做法是结合

dirname(__FILE__)

和

realpath()

,并使用

DIRECTORY_SEPARATOR

常量。


这里有几个关键点:

dirname(__FILE__)

: 提供当前文件的目录,这是一个可靠的起点。

DIRECTORY_SEPARATOR

: 这是一个PHP内置常量,根据操作系统的不同,它会自动是

/

(Unix/Linux)或


(Windows)。这避免了硬编码斜杠带来的跨平台兼容性问题。

realpath()

: 这个函数至关重要。它会解析所有符号链接(symlinks)、

/./

和

/../

引用,返回一个规范化的绝对路径。这意味着即使你的应用部署在一个通过符号链接指向的目录中,

realpath()

也能帮你找到真实的物理路径,这对于安全性(避免路径遍历)和路径一致性都非常重要。没有

realpath()

,你可能会得到一个包含

..

的逻辑路径,而不是实际的文件系统路径,这在某些文件操作函数中可能会出问题。定义常量: 将应用程序的根目录定义为一个常量(如

APP_ROOT

),可以避免在代码中重复计算路径,提高可读性和维护性。

我个人经验是,每次涉及到文件路径的定义,尤其是全局性的路径,都应该考虑使用

realpath()

。它就像给路径做了一次“清理”,确保我们得到的是最准确、最可靠的地址。

在命令行(CLI)环境下获取脚本路径的特殊考量

当PHP脚本在命令行界面(CLI)下运行时,其环境与Web服务器环境有所不同,这直接影响到我们获取脚本路径的方式。

$_SERVER

超全局变量虽然依然存在,但其内容会相对精简,一些Web特有的变量可能缺失或值不同。

在CLI环境下,

__FILE__

常量依然保持其可靠性。它会给出当前执行文件的绝对路径,这一点与Web环境无异。


$_SERVER['SCRIPT_FILENAME']

也通常是可靠的,它会提供被执行的PHP脚本的完整路径。


然而,CLI环境有一个Web环境没有的特性:

$argv

数组。这个数组包含了命令行传递给脚本的所有参数,其中

$argv[0]

通常就是脚本自身的名称(或路径)。


$argv[0]

的路径形式取决于你如何调用脚本。如果仅仅是

php cli.php

,它可能是相对路径甚至只有文件名。如果用

php /path/to/cli.php

,它就是绝对路径。这使得

$argv[0]

不如

__FILE__

或

$_SERVER['SCRIPT_FILENAME']

那样直接给出绝对路径。

getcwd()

在CLI环境中变得尤为重要。它返回的是脚本被执行时所在的“当前工作目录”。


这与Web服务器中

getcwd()

通常指向Web根目录的行为形成对比。在CLI中,

getcwd()

可以动态变化,取决于用户在哪个目录下执行了

php

命令。

我的建议是,在CLI脚本中,如果需要获取脚本自身的物理位置,

__FILE__

依然是最稳妥和直接的方式。如果需要获取脚本执行时的当前目录(例如,脚本需要处理当前目录下的文件),那么

getcwd()

就非常有用。而

$argv[0]

虽然能提供脚本名,但在构建绝对路径时,通常需要额外的处理(如结合

realpath()

和

dirname()

)才能确保其可靠性。在CLI应用中,路径处理的灵活性和潜在的复杂性都更高,因此选择合适的路径获取方式,并辅以

realpath()

进行规范化,是保证脚本健壮性的关键。

以上就是php如何获取当前脚本的文件路径?PHP获取脚本路径常量与函数的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1273280.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP如何使用Traits_PHP中Trait代码复用的使用方法与场景
上一篇 2025年12月10日 15:32:56
php如何获取一个类的所有方法?PHP反射获取类方法列表
下一篇 2025年12月10日 15:33:07

相关推荐

  • laravel框架的中间件middleware的详解

    laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解

    本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 laravel中间件是个非常方便的东西,能将一些逻辑实现解耦,并且在laravel中,中间件的编写也是非常的方便。谁用谁知道。 1.装饰器模式 lara…

    2026年9月26日 • 用户投稿
    000
  • 手机远程监控摄像头推荐——选购指南(了解市场上什么牌子的手机远程监控摄像头性能好)

    手机远程监控摄像头推荐——选购指南(了解市场上什么牌子的手机远程监控摄像头性能好)手机远程监控摄像头推荐——选购指南(了解市场上什么牌子的手机远程监控摄像头性能好)手机远程监控摄像头推荐——选购指南(了解市场上什么牌子的手机远程监控摄像头性能好)手机远程监控摄像头推荐——选购指南(了解市场上什么牌子的手机远程监控摄像头性能好)

    问题:如何选择可靠的远程监控摄像头来保护您的家庭安全?简要说明:选择一款合适的远程监控摄像头至关重要,可以为您提供实时监控和安全保障。引导语:继续阅读本文,php小编新一将为您推荐多个值得信赖的品牌,并详细介绍其功能和优点,帮助您轻松找到理想的远程监控摄像头,守护您的家庭安全。 市场上的手机远程监控…

    2026年9月26日 • 用户投稿
    000
  • u盘文件怎么自动同步电脑文件

    u盘文件怎么自动同步电脑文件u盘文件怎么自动同步电脑文件u盘文件怎么自动同步电脑文件u盘文件怎么自动同步电脑文件

    使用同步软件(SyncBackFree、FreeFileSync、GoodSync)或脚本(Robocopy、rsync)可实现 U 盘与电脑自动同步。步骤包括:安装工具、配置同步任务(源文件夹、目标文件夹、同步模式和频率)、运行任务、验证同步结果。务必确保可靠连接,定期检查任务,并妥善处理冲突和错…

    2026年9月26日 • 用户投稿
    000
  • Windows CMD 换肤

    Windows CMD 换肤Windows CMD 换肤Windows CMD 换肤Windows CMD 换肤

    为了在 windows 平台上进行 c 开发更具乐趣,我经常使用 cmd 终端,尤其是在集成了 ubuntu 子系统(wsl)之后。为了更愉快地呼出 wsl,我习惯在 cmd 下操作,但默认皮肤不够吸引人。因此,我搜寻了一些换肤方法,并在此分享我的发现。 首先,你需要准备好换肤工具:ColorToo…

    2026年9月26日 • 用户投稿
    000
  • firefox官网首页入口 火狐浏览器手机版免费下载地址

    firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址

    火狐浏览器官网首页入口是https://www.mozilla.org/zh-CN/firefox/new/,该页面提供手机版免费下载链接,并介绍其核心特性如阻止跟踪器、沙盒技术、多设备同步和隐私浏览模式。 firefox官网首页入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来火狐浏览…

    2026年9月26日 • 用户投稿
    000
  • Larave框架下Contracts契约的解析

    本篇文章给大家带来的内容是关于larave框架下contracts契约的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Contracts Laravel 的契约是一组定义框架提供的核心服务的接口, 例如我们在介绍用户认证的章节中到的用户看守器契约IllumninateCont…

    2026年9月26日
    000
  • laravel如何创建自定义的Artisan命令_Laravel自定义Artisan命令教程

    答案:在 Laravel 中创建自定义 Artisan 命令可自动化常用任务,使用 make:command 生成命令类,配置 signature 和 description 属性定义调用方式与描述,于 handle() 方法编写逻辑,通过 argument() 和 option() 获取参数与选项…

    2026年9月26日
    000
  • 如何查看本机IP地址—一步指南介绍本地网络IP查询技巧

    本地IP是设备在家庭网络中的标识。通过系统设置可直观查看:Windows在“网络和Internet设置”中查找IPv4地址;macOS在“系统偏好设置-网络”查看;手机在Wi-Fi详情中获取。命令行方式更高效:Windows用ipconfig,macOS/Linux用ifconfig | grep …

    2026年9月26日
    000
  • sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置

    sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置

    Sublime Text 默认不支持 Vue 文件的语法高亮,但可以通过安装插件来实现。Vue 文件是混合语法(HTML、JavaScript、CSS),需要专门的语法定义才能正确高亮。以下是设置步骤: 1. 安装 Package Control(如未安装) 如果还没安装 Package Contr…

    2026年9月26日 • 用户投稿
    000
  • Gemini需要GPU支持吗 Gemini对硬件的依赖与运行建议

    Gemini需要GPU支持吗 Gemini对硬件的依赖与运行建议Gemini需要GPU支持吗 Gemini对硬件的依赖与运行建议Gemini需要GPU支持吗 Gemini对硬件的依赖与运行建议Gemini需要GPU支持吗 Gemini对硬件的依赖与运行建议

    很多人在使用或了解大型语言模型Gemini时,都会好奇它是否必须依赖高性能的图形处理器(GPU)才能运行。本文将围绕Gemini对硬件的需求这一核心问题进行探讨,详细说明GPU在其中的作用、模型的其他硬件依赖性以及为获得更好体验而提供的运行建议。通过了解这些信息,您可以更好地评估和准备适合运行或利用…

    2026年9月26日 • 用户投稿
    100
  • 百家号动态怎么发布_百家号动态发布的方法与注意事项

    百家号动态怎么发布_百家号动态发布的方法与注意事项百家号动态怎么发布_百家号动态发布的方法与注意事项百家号动态怎么发布_百家号动态发布的方法与注意事项百家号动态怎么发布_百家号动态发布的方法与注意事项

    要成功发布百家号动态,需先完成账号注册与实名认证,确保具备发布权限。通过手机APP或网页后台进入发布页面,撰写200字内简洁内容,可添加9张图或短视频及话题标签以提升推荐。发布前须遵守审核规则:禁发政治敏感、虚假宣传、侵权盗用、低质标题党及夸大医疗效果等内容,避免审核失败或账号限流,保障内容合规与曝…

    2026年9月26日 • 用户投稿
    100
  • 别再浪费纸了!一文掌握“双面打印”的正确姿势

    别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势

    你是否也曾为家中或办公室里堆积如山的废纸感到惋惜? 你是否在打印一份几十页的报告时,默默看着打印机“哗哗”吐出厚厚一叠纸张,心里泛起一丝浪费的不安? 其实,你距离成为一位高效、节约又环保的打印高手,只差一个“双面打印”的操作。 别再用“不会设置”、“太麻烦”当作借口,让纸张白白流失。 今天,我们就来…

    2026年9月26日 • 用户投稿
    1500
  • 远程桌面失败:你的凭据不工作

    远程桌面失败:你的凭据不工作远程桌面失败:你的凭据不工作远程桌面失败:你的凭据不工作远程桌面失败:你的凭据不工作

    解决远程桌面连接失败的问题,可以尝试以下几种方法: 方法一: 首先,按Win+R快捷键,输入“secpol.msc”或“gpedit.msc”打开安全策略或组策略编辑器: 然后,找到并更改默认设置,将“仅来宾—本地用户以来宾身份验证”调整为“经典:本地用户以自己的身份验证”。 方法二: 只需调整远程…

    2026年9月26日 • 用户投稿
    100
  • Laravel框架中Pipeline的解析(代码示例)

    本篇文章给大家带来的内容是关于laravel框架中pipeline的解析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 大家好,今天给大家介绍下Laravel框架的Pipeline。 它是一个非常好用的组件,能够使代码的结构非常清晰。 Laravel的中间件机制便是基于…

    2026年9月26日
    000
  • linux常用命令有哪些 分别是什么意思

    linux常用命令有哪些 分别是什么意思linux常用命令有哪些 分别是什么意思linux常用命令有哪些 分别是什么意思linux常用命令有哪些 分别是什么意思

    Linux 中常用的命令包括:文件和目录管理:ls、cd、mkdir、rmdir、touch文本处理:cat、grep、sed、awk、less进程管理:ps、kill、top、htop、nice网络管理:ping、traceroute、netstat、ifconfig、wget系统管理:reboo…

    2026年9月26日 • 用户投稿
    100
  • 云原生Java监控全套方案:从Micrometer到Grafana可视化看板

    云原生Java监控全套方案:从Micrometer到Grafana可视化看板云原生Java监控全套方案:从Micrometer到Grafana可视化看板云原生Java监控全套方案:从Micrometer到Grafana可视化看板云原生Java监控全套方案:从Micrometer到Grafana可视化看板

    云原生Java监控方案以Micrometer收集指标,Prometheus存储查询,Grafana实现可视化。Micrometer提供供应商中立的API,与Spring Boot Actuator集成,自动暴露JVM、HTTP等指标;通过micrometer-registry-prometheus依…

    2026年9月26日 • 用户投稿
    000
  • WPS格式文件中的宏如何安全处理_WPS宏安全管理与处理步骤

    WPS格式文件中的宏如何安全处理_WPS宏安全管理与处理步骤WPS格式文件中的宏如何安全处理_WPS宏安全管理与处理步骤WPS格式文件中的宏如何安全处理_WPS宏安全管理与处理步骤WPS格式文件中的宏如何安全处理_WPS宏安全管理与处理步骤

    首先禁用所有宏并启用通知,再检查宏来源与数字签名,对可疑文件使用沙箱环境测试,必要时清除文档宏代码,最后通过受信任位置管理合法宏运行。 如果您在打开WPS格式文件时遇到宏相关提示或安全警告,可能是文档中包含可执行的宏代码。不正确的处理可能导致恶意代码运行,威胁系统安全。以下是针对WPS文件中宏的安全…

    2026年9月26日 • 用户投稿
    100
  • sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键

    sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键

    Sublime Text通过安装HTML-CSS-JS Prettify等插件可实现代码格式化,需先安装Package Control,再通过命令面板搜索并安装插件,随后在Key Bindings中添加快捷键配置,如Ctrl+Alt+F用于格式化JS/HTML/CSS文件,保存后即可使用;注意确保文…

    2026年9月26日 • 用户投稿
    100
  • Node.js spawn 命令参数解析与 shell: true 的应用

    Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用

    本文探讨Node.js child_process.spawn 函数在处理复杂命令行参数时遇到的常见问题,特别是当参数包含路径或需要特殊解释时,可能导致目标程序(如Java)无法正确识别。通过引入 shell: true 选项,并结合正确的参数格式化,可以有效解决此类问题,同时强调了使用此选项时的安…

    2026年9月26日 • 用户投稿
    000
  • Windows Server 2012 Hyper-V群集图文教程

    Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程

    接下来我们将继续测试windows server 2012 hyper-v群集功能,以实现虚拟机的高可用性。 实验环境: 四台服务器均运行Windows Server 2012 DataCenter操作系统。 SRV2012服务器上安装了iSCSI目标服务器角色,并配置了两个虚拟磁盘,供两台群集服务…

    2026年9月26日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信