关于文件加载还有一个非常重要的问题需要注意,就是路径问题。
文件路径分为相对路径和绝对路径,前面两节举得例子都是用的相对路径,使用相对路径很容易出现问题的。
看演示:
在根目录下a目录内有1.php文件。
在根目录下a目录内有2.php文件,前面我们已了解,路径1.php与./1.php是一样的,表示同目录。
在浏览器输入2.php:
能正常显示,那问题来了,继续往下看:
结果报错了。
这是因为路径不对造成的错误,为什么会这样?分析下:
3.php加载./a/2.php能正常加载,./a/2.php里包含加载同目录下1.php文件的代码,现在是在3.php中运行这些代码,根据代码的意思3.php是去找的自己同目录下的1.php,而不是a目录下的1.php,因为找错位置没有目标文件而报错。
相对路径会很容易出现问题,所以加载文件最好以绝对路径方式。
绝对路径的比较简单,不容易混淆出错,require|inclue 的就是对应磁盘中的文件。
require '/wwwroot/xxx.com/app/test/b.php'; // Linux中
require 'c:/wwwroot/xxx.com/app/test/b.php'; // windows中
我们也不会按照上面那种方式写,都写死了,如果整个网站根目录改变,我们总不能挨个文件去修改。
写代码程序一定要写活了,解决这个问题方式很多种,只说一个最常用也最值得推荐的一种方式:
结果能正常显示:
dirname()是一个函数,__FILE__是魔术常量,dirname(__FILE__)计算出来的是一个绝对路径形式的目录。
__FILE__可以返回PHP文件的路径,dirname()可以返回路径中的目录部分,哪个php文件用dirname(__FILE__)就返回的是哪个php文件所在目录的路径。