require_once('../../lib/some_class.php');
复制代码
这种写法的缺点:它首先查找指定的php包含路径,然后查找当前目录。因此会检查过多路径。如果该脚本被另一目录的脚本包含,它的基本目录变成了另一脚本所在的目录。
另外一个问题就是:当定时任务运行该脚本,它的上级目录可能就不是工作目录了。
因此,最佳选择是使用绝对路径,例如:
define('root' , '/var/www/project/');require_once(root . '../../lib/some_class.php');
复制代码
以上代码定义了一个绝对路径, 值被写死了。
下面,加以改进,路径 /var/www/project 也可能会改变, 那么每次都要改变它吗? 不是的,可以使用__file__常量,例如:
define('root' , pathinfo(__file__, pathinfo_dirname));require_once(root . '../../lib/some_class.php');
复制代码
现在,无论移到哪个目录,如移到一个外网的服务器上,代码无须更改便可正确运行。也就是用到了pathinfo与__file__常量,实现了可移植的代码。