如何获取WHMCS根目录

How to get the WHMCS root directory

我做了一个简单的WHMCS插件,它使用了WHMCS中的hook函数。 如果我使用 require_once (ROOTDIR.'/modules/addons/module_name/modulefunction.php') 它在我的安装上运行良好,因为我为我的 WHMCS 使用了一个子域。但是我在另一个不使用子域的安装上测试了它,但它不起作用,因为名称中不包含 WHMCS 目录。

我有什么方法可以获取目录的名称,或者直接从 hooks 文件夹 (includes/hooks/my_hook.php) 返回到 addons 目录。

我尝试使用 require_once '../../../modules/addons/module_name/modulefunction.php';,但它只是说找不到文件。

错误:

Fatal error: require_once(): Failed opening required '../../../modules/addons/module_name/modulefunction.php' (include_path='/home/me/public_html/hosting/vendor/phpseclib/phpseclib/phpseclib:.:/usr/lib/php:/usr/local/lib/php:/usr/local/php/') in /home/me/public_html/hosting/includes/hooks/my_hook.php on line 55

任何帮助都会很棒 :)。 谢谢。

从 includes/hooks 文件夹中,您不能只做:

require_once dirname( dirname( __DIR__ ) ) . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . 'module_name' . DIRECTORY_SEPARATOR . 'modulefunction.php';

我相信无论您的安装如何,DIR 上的双目录名都会让您进入根目录。

张贴这个因为我在任何地方都找不到答案。

我想对我的 WHMCS 插件进行完整性检查,以确保安装了其他文件,所以我执行了下面的代码并且运行良好。

我在模块中的任何其他文件之前加载此文件,因此与模块相关的任何其他内容的依赖性为零。

此代码在 {whmcs–dir}/modules/servers/mailtrust.php

因此,只要我转到我的模块中的任何页面,它就会确保所有必要的文件都已安装,如果没有则抛出一个友好的错误。

$path_to_includes 将为您提供模块在当前 WHMCS 安装中的安装目录。

$path_to_includes =  dirname( dirname( __DIR__ ) );
$path_to_includes =  str_replace("modules","includes", $path_to_includes);
$path_to_includes = $path_to_includes . "/hooks/mailtrust.php";
if(!file_exists($path_to_includes)) {
   echo "<h1>ERROR - System File Missing</h1>";
   echo "Please upload the mailtrust hook file to $path_to_includes";
   exit;
}