为什么不使用$_SERVER['DOCUMENT_ROOT'],而不是声明一个始终保存Web 应用程序根的常量?
<?php
define('ABSPATH', dirname(__FILE__));
将以下代码放入应用程序根文件夹中的文件中,并在每次页面加载时包含它。
然后,无论您的本地副本是否位于子目录 folder 中,您都可以简单地始终使用 $path = ABSPATH . '/path/to/file.php';。
如果您的应用程序已经有一个包含在每个页面加载中的文件,您只需将上面的代码拖放到该文件中即可。
请注意,您可能需要添加额外的dirname() 调用,具体取决于该文件所在的位置。为您从 web 应用的根目录传递的每个目录添加一个。
例如,如果你的webapp位于/webapp/,而你的“全局包含”位于/webapp/includes/framework/init.php,那么上面的代码就需要这样修改:
define('ABSPATH', dirname(dirname(dirname(__FILE__))));
即:由于来自 webapp 根目录 (includes/framework) 的两个额外文件夹,导致额外的 2 个 dirname() 调用
澄清
上面的代码应该在一个文件中,而一个文件只在您的 Web 应用程序中。该文件需要包含在每个页面加载中。
如果您已经有一个在任何处理之前包含的文件(例如配置文件或其他文件),您可以将该代码复制并粘贴到该文件中。
dirname() 调用次数取决于您复制和粘贴的文件的深度
中的代码相对于您的 Web 应用程序的根目录。对于上面的示例,假设您的 Web 应用程序的根由 ~ 表示。
如果您将我的代码复制粘贴到~/abspath.php,那么您需要一个dirname() 调用。
如果您将我的代码复制粘贴到~/includes/abspath.php,那么您需要两次dirname() 调用。
如果您将我的代码复制粘贴到~/includes/config/abspath.php,那么您需要三个dirname() 调用。现在让我们说这是它的最终位置。
在~/index.php 中,您执行以下操作:
<?php
require_once('includes/config/abspath.php');
您可以访问ABSPATH。
在~/dir/someOtherPage.php 中,您执行以下操作:
<?php
require_once('../includes/config/abspath.php');
您可以访问ABSPATH。
这就是为什么我说如果您已经有一个包含在每个页面加载中的文件,只需将上述代码放入其中就更简单了。只要确保相应地修改dirname() 调用的数量即可。同样,此代码只能在一个文件中。