尽量少用相对路径

相对路径,相对的是工作目录(working directory),也就是当前命令行所处的目录(pwd查看);

目录结构:

D:\dev\php\magook\trunk\server\testdir
a.php 
t/ 
  b.php 
  c.txt

测试
a.php

echo file_get_contents("t/c.txt");
D:\dev\php\magook\trunk\server\testdir>php a.php
aaaaaaaaaaaaaaa

D:\dev\php\magook\trunk\server\testdir>cd ../

D:\dev\php\magook\trunk\server>php testdir/a.php
PHP Warning:  file_get_contents(t/c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\a.php on line 12

Warning: file_get_contents(t/c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\a.php on line 12

如果改成绝对路径
a.php

echo file_get_contents(__DIR__ . "/t/c.txt"); // __DIR__ 获取当前脚本在计算机中的绝对路径
D:\dev\php\magook\trunk\server>php testdir/a.php
aaaaaaaaaaaaaaa

D:\dev\php\magook\trunk\server>cd testdir

D:\dev\php\magook\trunk\server\testdir>php a.php
aaaaaaaaaaaaaaa

可见使用相对路径并不靠谱。

再比如
a.php

require('t/b.php');

echo read();

b.php

function read() {
    return file_get_contents("c.txt");
}
D:\dev\php\magook\trunk\server\testdir>php a.php
PHP Warning:  file_get_contents(c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\t\b.php on line 5

Warning: file_get_contents(c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\t\b.php on line 5

修改后
b.php

function read() {
    return file_get_contents("t/c.txt");
}
D:\dev\php\magook\trunk\server\testdir>php a.php
aaaaaaaaaaaaaaa

D:\dev\php\magook\trunk\server\testdir>cd ../

D:\dev\php\magook\trunk\server>php testdir/a.php
PHP Warning:  file_get_contents(t/c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\t\b.php on line 4

Warning: file_get_contents(t/c.txt): failed to open stream: No such file or directory in D:\dev\php\magook\trunk\server\testdir\t\b.php on line 4

b.php文件如果被多个文件引用那该怎么办?看到这里,发现相对路径更加不靠谱了。

所以改成绝对地址才是一劳永逸的。

最后说一下 requireinclude,它们内部使用的是相对于本脚本的地址,而不是相对于working directory,可以放心使用。

b.php

function read() {
    echo "here";
}
D:\dev\php\magook\trunk\server>php testdir/a.php
here

D:\dev\php\magook\trunk\server>cd testdir

D:\dev\php\magook\trunk\server\testdir>php a.php
here

无论在哪里执行都一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值