Php的路径问题

PART1.绝对路径与相对路径实例

网站目录有以下两个文件:

D:\WWW\PHP\A.php

D:\WWW\PHP\B.php

绝对路径演示:

A.php代码如下:


<?php

echo 'Hello 我是A!'

?>

B.php代码如下:

<!DOCTYPE html>
<?php
require ('D:\www\\php\a.php');
?>

这时打开B.PHP会显示”Hello 我是A!”,如下图:

图片1.png

在这个实例里,B的require就使用了绝对路径.

但一般我们不这样使用,因为当环境变化(比如换台电脑或重装系统改了WWW的位置)后,B的代码就失效了.

相对路径演示:

增加一个主页文件

D:\WWW\index.php

Index.php代码为:


<?php

echo '我是主页!';

?>

B.php代码如下:

<!DOCTYPE html>
<?php
require ('.\a.php');
echo “<br>”;
require ('..\index.php');
?>

这时打开B.PHP显示如下图:

图片2.png

在这个实例里,B的require使用了相对路径.

.\表示当前目录

..\表示上级目录

这样不管网站的路径环境如何改变,代码始终有效.

PART2.二次require的相对路径问题:

网站目录有以下几个文件:

D:\WWW\PHP\A.php

D:\WWW\PHP\B.php

D:\WWW\PHP\A.php

D:\WWW\PHP\A.php的代码如下:


<?php

echo 'Hello 我是A!'

?>

D:\WWW\PHP\B.php的代码如下:


<!DOCTYPE html>
<?PHP

require ('.\a.php');
?>

D:\WWW\A.php的代码如下:


<?php

echo 'Hello 我是假A!'

?>

再增加三个文件,目标都指向B.PHP

D:\WWW\1.php

代码如下:


<?php

require ('.\php\b.php');

?>

D:\WWW2\2.php

代码如下:


<?php

require ('..\www\php\b.php');

?>

D:\WWW\php\3.php

代码如下:


<?php

require ('.\b.php');

?>

这时打开1.PHP会出现”Hello 我是假A!”的页面.

打开2.PHP都会出现下面错误提示.


Fatal error: require(): Failed opening required '.\a.php'

只有3.php是正常的显示”Hello 我是A!”.

这是因为二次require后,B.PHP使用的相对路径对其它文件来说不一定有效,所以才出现以上三种情况 .

如何解决呢?把B.PHP的路径改为绝对路径(D:\www\php\a.php)就好了.但我们前面已经说了,绝对路径并不适合复杂环境,还能怎么办?

PHP5.3之后的版本给我们提供一个魔术常量,它就是:__DIR__

__DIR__:指向当前执行的PHP脚本所在的目录.

因此,我们只需要把B.PHP的代码改为:


<!DOCTYPE html>
<?PHP
require __DIR__ .('.\a.php');
?>

所有的问题都解决了.

PART3.跨目录require的相对路径问题

问题难度再升级一下,把A.PHP的路径改为:

D:\WWW2\A.php

其它文件路径不变.依然是:

D:\WWW\PHP\B.php

D:\WWW\1.php

D:\WWW2\2.php

D:\WWW\php\3.php

如果不改代码,以上四个文件都是无法正常显示的.

把B.PHP的代码改为


<!DOCTYPE html>
<?PHP

require ('..\..\www2\a.php');
?>

之后B.PHP和3.PHP可正常显示”Hello 我是A!”.

可是2.php和3.php还是报错.

在不使用绝对路径的情况下,且魔术常量__DIR__已经不起作用,只有全局变量”$_SERVER['DOCUMENT_ROOT']”能拯救一切.

$_SERVER['DOCUMENT_ROOT']:当前运行脚本所在的文档根目录

把B.PHP的代码改为


<!DOCTYPE html>
<?PHP

Require $_SERVER['DOCUMENT_ROOT']. ('.\www2\a.php');
?>

问题都解决.

注意事项:

1.本文的编程环境为:windows10操作系统/PHP7.3软件/Atom 编辑器.
2.另一个跟路径有关的魔术常量为__FILE__:文件的完整路径和文件名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容