先来看一个例子:
dc_leba_new\
async_script\
getdata.php
data.txt
目录结构如上。
getdata.php文件内容为:
<?php
$file = './data.txt';
print_r(file_get_contents($file));
在CMD命令行下,通过两种方式运行
1、cd async_script
php getdata.php
结果可以正常输出
2、回到在async_script的上一层,cd ../
即我们来到了 dc_leba_new 目录下
php async_script/getdata.php
结果报错,无法找到 file_get_contents(./data.txt): failed to open stream
通常我们认为,./ 表示当前目录,也就是和当前脚本处在同一个目录下的文件,实际上这是一个非常错误的认知。
正常的理解是:./ 表示 我们使用 php 命令来调用 php 解释器的时候,我们所处的目录,无论在windows的CMD还是在Linux下
我们输入命令的时候,左边都会有提示当前我们处在哪个目录下,所以 ./ 表示的就是这个目录。
这就提醒我们,对于以脚本方式运行的php文件,在定义路径的时候一定要使用绝对路径!!!!
那么对于以web server运行的php呢,由于没有命令行的存在,./ 表示的就是我们通过http方式访问的文件的所在目录;比如:我们
访问单一入口项目时都是访问项目中的index.php文件,指的就是index.php所在的目录了;如果访问的不是单一入口的,那么被访问
的xxxx.php所在的目录就是 ./ 所指向的。
突然想起了,我之前写的一个回写脚本的框架,非要进入到脚本目录下才能正常运行,在外面的其他目录死活运行不了,当初以为是权
限的原因,现在想想,应该是我的自动加载函数使用了相对路径了。
php中的当前路径和相对路径的误区
猜你喜欢
转载自blog.csdn.net/raoxiaoya/article/details/92372172
今日推荐
周排行