当前位置: 首页 > news >正文

PHP获取文件路径getcwd()、__DIR__、__FILE__的区别

getcwd()

getcwd() 是一个函数,它返回当前工作目录(CWD)的完整路径。当前工作目录是脚本开始执行时所在的目录,除非在脚本执行过程中通过 chdir() 函数进行了更改。

$cwd = getcwd();  
echo $cwd; // 输出当前工作目录的完整路径

__DIR__

__DIR__ 是一个魔术常量,它返回当前文件所在的目录的完整路径(不包括文件名)。这个路径在文件被解析时就已经确定,并且之后不会改变,无论当前工作目录如何变化。

echo __DIR__; // 输出当前文件所在目录的完整路径

__FILE__

__FILE__ 是另一个魔术常量,它返回当前文件的完整路径和文件名。这个路径也是在文件被解析时确定的,之后同样不会改变。

echo __FILE__; // 输出当前文件的完整路径和文件名

区别

  • getcwd()
    • 返回当前工作目录的路径。
    • 可以通过 chdir() 函数在脚本执行过程中更改。
    • 与脚本的起始目录相关,而不是文件本身。
  • __DIR__
    • 返回当前文件所在的目录的路径。
    • 路径在文件被解析时确定,之后不会改变。
    • 与文件本身的位置相关。
  • __FILE__
    • 返回当前文件的完整路径和文件名。
    • 路径在文件被解析时确定,之后不会改变。
    • 与文件本身的位置相关。

示例

假设你有以下的文件结构:

/project/  /includes/  helper.php  main.php

在 main.php 中,如果当前工作目录是 /project/,你可以得到以下输出:

// main.php  
echo getcwd(); // 输出: /project/  
echo __DIR__; // 输出: /project/  
echo __FILE__; // 输出: /project/main.php  chdir('includes'); // 更改当前工作目录为 /project/includes/  
echo getcwd(); // 输出: /project/includes/  
echo __DIR__; // 输出: /project/ (仍然不变)  
echo __FILE__; // 输出: /project/main.php (仍然不变)

在 helper.php 中,你会得到不同的输出:

// includes/helper.php  
echo getcwd(); // 输出可能与 main.php 中的相同,也可能是其他目录(取决于如何包含 helper.php)  
echo __DIR__; // 输出: /project/includes/  
echo __FILE__; // 输出: /project/includes/helper.php

注意getcwd() 的输出可能因 chdir() 的调用或包含文件的上下文而异,而 __DIR__ 和 __FILE__ 则总是返回包含它们的文件的路径。

http://www.lryc.cn/news/352965.html

相关文章:

  • Kafka(十三)监控与告警
  • SBC3568启动升级,灵活更换动画logo
  • v-if 与 v-show(vue3条件渲染)
  • nuxt: generate打包后访问资源404问题
  • 【图像超分】论文精读:Residual Non-local Attention Networks for Image Restoration(RNAN)
  • AI大模型:大数据+大算力+强算法
  • 同名在线查询系统微信小程序源码下载支持多种流量主,附带系统教程
  • 2024年5月26日 十二生肖 今日运势
  • Vue 3 组件基础与模板语法详解
  • ACM实训冲刺第十八天
  • 22AP70/SS927
  • C++实现的代码行数统计器
  • C# 结合 JS 暴改腾讯 IM SDK Demo
  • 【Web】CISCN 2024初赛 题解(全)
  • 【C++进阶】AVL树
  • 云部署最简单python web
  • 【Pytorch】【MacOS】14.m1芯片使用mps进行深度模型训练
  • go学习笔记-从圣经中抄录的接口值的思考
  • ICML 2024 时空数据(Spatial-Temporal)论文总结
  • 多线程(C++11)
  • HLS入门
  • 电信光猫的USB存储对外网开放访问
  • 世界上首位AI程序员诞生,AI将成为人类的对手吗?
  • 什么是创造力?如何判断自己的创造力?
  • Elasticsearch集群搭建学习
  • 数据库(vb.net+OleDB+Access)简易学生信息管理系统
  • Android 自定义图片进度条
  • 对话:用言语构建深刻的思想碰撞
  • Linux完整版命令大全(九)
  • solidworks画螺栓学习笔记