使用 PHP 通过 WHM 或 cPanel API 创建新的子域和 MySQL 数据库
Create a new subdomain and MySQL database via WHM or cPanel API with PHP
我本来希望这是一个容易完成的任务,但是现在我已经深入研究了几天,整个过程似乎比我原先想象的要复杂得多。
我想在 mydomain.com 下创建一个新的子域,例如test123.mydomain.com,通过 WHM API 1 或 cPanel API 2 使用 PHP,随后在该新子域下使用新的 MySQL 数据库。
我假设我需要首先使用 WHM 进行身份验证(使用 WHM 远程 API 令牌?),然后调用适当的 API 模块和函数,最后检查成功或错误的响应。因为我是用 PHP 做的,所以我假设我需要通过 curl
来做这一切。在 cPanel API 2 docs 中,我看到这个调用:
https://hostname.example.com:2087/cpsess##########/json-api/cpanel?cpanel_jsonapi_user=user&cpanel_jsonapi_apiversion=2&cpanel_jsonapi_module=SubDomain&cpanel_jsonapi_func=addsubdomain&domain=subdomain&rootdomain=example.com&dir=%2Fpublic_html%2Fdirectory_name&disallowdot=1
不幸的是,这并没有多大帮助,因为我没有打开 "cpsess",因为我正在通过 PHP 脚本执行此操作并用 WHM 遥控器替换 "cpsess##########" API 令牌也不起作用。我已经尝试了几种不同的方法,到目前为止,我唯一可以开始工作的方法是 cPanel API 1 在服务器上列出帐户的示例...它工作得很好,但它在 API 1 没有可用于创建子域的模块:
function getUserAccountList($user,$token){
$userList = "";
$query = "https://hostname.example.com:2087/json-api/listaccts?api.version=1";
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
$header[0] = "Authorization: whm $user:$token";
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
curl_setopt($curl, CURLOPT_URL, $query);
$result = curl_exec($curl);
$http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_status != 200) {
$userList = "[!] Error: " . $http_status . " returned\n";
} else {
$json = json_decode($result);
$userList.= "[+] Current cPanel users on the system:<BR><BR>";
foreach ($json->{'data'}->{'acct'} as $userdetails) {
$userList.= $userdetails->{'user'} . "<BR>";
}
}
curl_close($curl);
return $userList;
}
问题是:如何使用 WHM API 1 或 cPanel API 2 使用 PHP 脚本创建新的子域和 MySQL 数据库?任何帮助将不胜感激!
我找到了一个非常有效的解决方案,并且消除了处理 cPanel 和 WHM 可用的不同 API 版本时的大部分猜测:
此设置需要安装 Composer、PHP 依赖管理器和由 Mochamad Gufron 开源的 mgufrone/cpanel-whm 包,因此您需要对服务器具有根访问权限才能执行此操作。在上面的 link 上是所有用于设置的信息,以及通过 WHM/cPanel API 和 [= 创建新子域和 MySQL 数据库的所有信息20=].
我本来希望这是一个容易完成的任务,但是现在我已经深入研究了几天,整个过程似乎比我原先想象的要复杂得多。
我想在 mydomain.com 下创建一个新的子域,例如test123.mydomain.com,通过 WHM API 1 或 cPanel API 2 使用 PHP,随后在该新子域下使用新的 MySQL 数据库。
我假设我需要首先使用 WHM 进行身份验证(使用 WHM 远程 API 令牌?),然后调用适当的 API 模块和函数,最后检查成功或错误的响应。因为我是用 PHP 做的,所以我假设我需要通过 curl
来做这一切。在 cPanel API 2 docs 中,我看到这个调用:
https://hostname.example.com:2087/cpsess##########/json-api/cpanel?cpanel_jsonapi_user=user&cpanel_jsonapi_apiversion=2&cpanel_jsonapi_module=SubDomain&cpanel_jsonapi_func=addsubdomain&domain=subdomain&rootdomain=example.com&dir=%2Fpublic_html%2Fdirectory_name&disallowdot=1
不幸的是,这并没有多大帮助,因为我没有打开 "cpsess",因为我正在通过 PHP 脚本执行此操作并用 WHM 遥控器替换 "cpsess##########" API 令牌也不起作用。我已经尝试了几种不同的方法,到目前为止,我唯一可以开始工作的方法是 cPanel API 1 在服务器上列出帐户的示例...它工作得很好,但它在 API 1 没有可用于创建子域的模块:
function getUserAccountList($user,$token){
$userList = "";
$query = "https://hostname.example.com:2087/json-api/listaccts?api.version=1";
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
$header[0] = "Authorization: whm $user:$token";
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
curl_setopt($curl, CURLOPT_URL, $query);
$result = curl_exec($curl);
$http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_status != 200) {
$userList = "[!] Error: " . $http_status . " returned\n";
} else {
$json = json_decode($result);
$userList.= "[+] Current cPanel users on the system:<BR><BR>";
foreach ($json->{'data'}->{'acct'} as $userdetails) {
$userList.= $userdetails->{'user'} . "<BR>";
}
}
curl_close($curl);
return $userList;
}
问题是:如何使用 WHM API 1 或 cPanel API 2 使用 PHP 脚本创建新的子域和 MySQL 数据库?任何帮助将不胜感激!
我找到了一个非常有效的解决方案,并且消除了处理 cPanel 和 WHM 可用的不同 API 版本时的大部分猜测:
此设置需要安装 Composer、PHP 依赖管理器和由 Mochamad Gufron 开源的 mgufrone/cpanel-whm 包,因此您需要对服务器具有根访问权限才能执行此操作。在上面的 link 上是所有用于设置的信息,以及通过 WHM/cPanel API 和 [= 创建新子域和 MySQL 数据库的所有信息20=].