目前,使用 PHP 代码,我在 cPanel 中创建 MySQL 数据库,然后是 MySQL 用户,然后使用这 4 个 PHP 例程将它们映射到数据库。问题是,每逢千载难逢,当我们认为它与服务器负载有关时,这个脚本说它创建了 MySQL、用户和 user->db 映射,但我们在 cPanel 中看不到它。当我们转到 MySQL 命令行时,我们会在那里看到它。并且 WordPress 无法部署到它——说它无法访问数据库。我们必须去命令行 MySQL 删除数据库。当我们在较低的服务器负载下手动运行这些例程时,问题就消失了。问题是我通常比实际发生的问题晚一天被召回——所以我看不到发生了什么。我的日志只是告诉我 WordPress 不能 t 部署到 MySQL 数据库。当我去寻找时,我在 cPanel 中看不到它,但在 MySQL 的命令行中看到它。
所以,由于这些例程是有问题的,我想知道 Softaculous 是如何解决这个问题的。因为即使我的脚本失败,Softaculous 仍然可以正常工作。
<?php
class cPanel {
public static function cp_curlData($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sPostData, $nTimeoutSeconds = 0) {
$sURL = ($sCpanelPort == 2083) ? 'https://' : 'http://';
$sURL .= $sRootDomain . ':' . $sCpanelPort . '/xml-api/cpanel';
$asHeader[0] = 'Authorization: Basic ' . base64_encode($sCpanelUser . ':' . $sCpanelPass) . "\r\n" .
"Content-Type: application/x-www-form-urlencoded\r\n" .
"Content-Length: " . strlen($sPostData) . "\r\n" . "\r\n" . $sPostData;
$hCurl = curl_init ();
curl_setopt($hCurl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($hCurl, CURLOPT_REFERER, 'https://www.google.com/?gws_rd=ssl#q=' . $sURL);
curl_setopt($hCurl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($hCurl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($hCurl, CURLOPT_URL, $sURL);
curl_setopt($hCurl, CURLOPT_HTTPHEADER, $asHeader);
curl_setopt($hCurl, CURLOPT_POST, 1);
if ($nTimeoutSeconds > 0) {
@ curl_setopt($hCurl, CURLOPT_TIMEOUT, $nTimeoutSeconds);
@ curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, 30);
}
$s = curl_exec($hCurl);
return $s;
}
public static function cp_createDatabase($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sUnPrefixedDBName) {
global $gsCpanel_Last_Result;
$sPostData = 'user=' . $sCpanelUser . '&cpanel_xmlapi_module=Mysql&cpanel_xmlapi_func=adddb&cpanel_xmlapi_apiversion=1&arg-0=' . $sUnPrefixedDBName;
$nTimeoutSeconds = 60;
$s = self::cp_curlData($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sPostData, $nTimeoutSeconds);
$gsCpanel_Last_Result = "$s";
if (strpos($s, '<result>1</result>') > 0) {
$sDBName = $sCpanelUser . '_' . $sUnPrefixedDBName;
return $sDBName;
} else {
return FALSE;
}
}
public static function cp_createDBUser($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sUnPrefixedDBUser, $sDBPass) {
global $gsCpanel_Last_Result;
$sTest = $sCpanelUser . '_' . $sUnPrefixedDBUser;
if (strlen($sTest)>16) {
$sUnPrefixedDBUser = substr($sUnPrefixedDBUser, 0, (strlen($sUnPrefixedDBUser) - (strlen($sTest) - 16)));
}
$sPostData = 'user=' . $sCpanelUser . '&cpanel_xmlapi_module=Mysql&cpanel_xmlapi_func=adduser&cpanel_xmlapi_apiversion=1&arg-0=' . $sUnPrefixedDBUser . '&arg-1='. $sDBPass;
$s = self::cp_curlData($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sPostData);
$gsCpanel_Last_Result = "$s";
if (strpos($s, '<result>1</result>') > 0) {
$sDBUser = $sCpanelUser . '_' . $sUnPrefixedDBUser;
return $sDBUser;
} else {
return FALSE;
}
}
public static function cp_addUserToDatabase($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sUnPrefixedDBName, $sUnPrefixedDBUser) {
global $gsCpanel_Last_Result;
$sPostData = 'user=' . $sCpanelUser . '&cpanel_xmlapi_module=Mysql&cpanel_xmlapi_func=adduserdb&cpanel_xmlapi_apiversion=1&arg-0=' . $sUnPrefixedDBName . '&arg-1=' . $sUnPrefixedDBUser . '&arg-2=all';
$s = self::cp_curlData($sRootDomain, $sCpanelUser, $sCpanelPass, $sCpanelPort, $sPostData);
$gsCpanel_Last_Result = "$s";
return (strpos($s, '<result>1</result>') > 0);
}
} // end class