php中的当前路径和相对路径的误区

先来看一个例子:

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所在的目录就是 ./ 所指向的。


突然想起了,我之前写的一个回写脚本的框架,非要进入到脚本目录下才能正常运行,在外面的其他目录死活运行不了,当初以为是权

限的原因,现在想想,应该是我的自动加载函数使用了相对路径了。

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/92372172