获取初始执行脚本的绝对路径的简单方法,在该脚本和包含在include、require、@987654325 中的任何其他脚本@ 是通过使用 constant 并将当前脚本路径存储在 主脚本 的开头:
define( 'SCRIPT_ROOT', __FILE__ );
当有一个“主”脚本 includes 每个其他需要的脚本时,上述解决方案适用,就像在大多数 Web 应用程序中一样。
如果不是这样,并且可能有多个“初始脚本”,那么为了避免重新定义并将正确的路径存储在每个脚本可能开头的常量中:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
关于(当前)accepted answer 的说明:
答案表明最初执行的脚本路径是get_included_files()返回的数组的第一个元素。
这是一个聪明而简单的解决方案,并且 - 在撰写本文时 -(我们几乎是 PHP 7.4.0)它确实有效。
但是通过查看documentation 并没有提到最初执行的脚本是get_included_files() 返回的数组的第一个项。
我们只阅读
最初调用的脚本被认为是“包含文件”,因此它将与 include 和 family 引用的文件一起列出。
在编写时,“最初调用的脚本”是数组中的第一个,但是 -技术上 - 不能保证这不会改变未来。
关于realpath()、__FILE__和__DIR__的说明:
其他人在他们的回答中建议使用__FILE__、__DIR__、dirname(__FILE__)、realpath(__DIR__)...
dirname(__FILE__) 等于 __DIR__(在 PHP 5.3.0 中引入),所以只需使用 __DIR__。
__FILE__ 和 __DIR__ 始终是绝对路径,因此 realpath() 是不必要的。