在解决有关在包含脚本中包含脚本的问题时,我最近遇到了魔术常量__DIR__
。
在做了一些阅读后,我找不到任何理由不使用__DIR__
为require
或include
语句中的每个路径添加前缀。
所以我的问题是 - 与使用相对路径相比,使用__DIR__ . '/path/to/script.php'
时是否有任何已知的缺点/潜在副作用?
感谢。
答案 0 :(得分:3)
PHP有两种包含文件的模式:基于相对路径,基于绝对路径:
require 'foo/bar.php';
require '/var/www/foo/bar.php';
使用相对路径时,查找是基于PHP include path执行的,这基本上是PHP将查找类似于UNIX $PATH
环境变量的目录列表。 Iif 您正在使用PEAR或其他模块安装程序在某些外部目录中安装PHP模块和文件,那么使用该机制定位和包含它是完全合理的外部模块。您甚至可以将该机制用于您自己的应用程序内的文件。在决定确切的文件位置时,它可以在服务器上部署应用程序时为您提供更多的余地。
然而,在实践中,这在某种程度上变得非常烦人,并且在尝试使用该系统时会遇到各种各样的问题。尤其是因为PEAR和PECL并没有特别受欢迎,composer是目前在PHP中管理依赖关系的事实上的机制。所以include-by-relative-path机制几乎已经死了,你应该使用绝对路径,__DIR__
是必须的。