Как создать базу данных через cpanel/whm API?

У меня есть API, создающий учетную запись на выделенном сервере для пользователя в порядке, создание адресов электронной почты также в порядке, однако, когда я пытаюсь создать базу данных mysql через API, я получаю сообщение об ошибке «Отказано в доступе», даже если доступ root .

Код, который я пытаюсь использовать:

$xmlapi = new xmlapi($host);
$xmlapi->password_auth("".$root_user."","".$root_pass."");    
$xmlapi->set_debug(1);
$xmlapi->set_output('array');
$xmlapi->set_port('2083'); 
//create database
$createdb = $xmlapi->api1_query($root_user, "Mysql", "adddb", array($dbname));

и данные об ошибках, которые я возвращаю:

URL: https://delta1.powerstorm.net:2083/xml-api/cpanel
DATA: cpanel_xmlapi_user=root&cpanel_xmlapi_module=Mysql&cpanel_xmlapi_func=adddb&cpanel_xmlapi_apiversion=1&arg-0=site
Authentication Header: Authorization: Basic cm9vdDphY3Jtp3MxOTY1

RESPONSE:
 <?xml version="1.0" ?>
<cpanelresult>
    <error>Access denied</error>
    <data>
        <result>0</result>
        <reason>Access denied</reason>
    </data>
</cpanelresult>

Любые идеи о том, почему эта часть выходит из строя, когда все остальное работает нормально?


person Jaime Cross    schedule 06.12.2013    source источник
comment
Зачем кому-то вообще хотеть сделать что-то подобное? Я предполагаю, однако, что вы путаете свою учетную запись пользователя сервера с учетной записью пользователя MySQL. Это не одно и то же.   -  person Mike Brant    schedule 07.12.2013
comment
Привет, Майк, я пытаюсь создать единую учетную запись, установить WordPress и установить тему. Документация API в лучшем случае расплывчата для v1 API, а сообщения об ошибках еще хуже. Я попытался изменить пользователя/пароль базы данных на то же, что и учетные данные сервера, но все равно не работает с тем же сообщением.   -  person Jaime Cross    schedule 07.12.2013
comment
Думаю, мне интересно, зачем вообще использовать API cPanel для создания нового пользователя/базы данных, когда это можно сделать гораздо проще с помощью сценария SQL, запускаемого из сценария оболочки, прямого взаимодействия с MySQL в PHP и т. д. Какое значение привносит ли cPanel API в этот процесс в отношении MySQL?   -  person Mike Brant    schedule 07.12.2013
comment
@MikeBrant Я пытался сделать это простым способом. Только после того, как я все настроил, я заметил, что пользователи и dbs не отображаются в whm/cpanel :)   -  person jpeltoniemi    schedule 23.12.2014


Ответы (2)


Вы не можете использовать учетную запись root для создания баз данных cPanel. Также не забудьте настроить порт. 2082 для незашифрованного соединения, а 2083 для зашифрованного. Вы также можете использовать IP-адрес вместо «имя_домена».

Проверьте следующий код, он должен работать.

require("xmlapi.php");

$opts = [
    "userName"   => "UserUserName",      //+++ Replace UserUserName
    "password"   => "UserPassword",      //+++ Replace UserPassword
    "dbPassword" => "DatabasePassword",  //+++ Replace DatabasePassword
];

$xmlapi = new xmlapi("domainName");   
$xmlapi->set_port( 2083 );   
$xmlapi->password_auth($opts['userName'],$opts['password']);     

$cpaneluser=$opts['userName'];
$databasename="dbName";
$databaseuser="dbUserName";
$databasepass=$opts['dbPassword'];

// database creation    
$createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename));   
// user creation
$usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass));   
// adds user to database
$addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array("".$cpaneluser."_".$databasename."", "".$cpaneluser."_".$databaseuser."", 'all'));
person Christopher Ellis    schedule 08.12.2013
comment
это показывает мне .. Обратите внимание: неопределенная переменная: выбирает C:\xampp\htdocs\xampp\myshopphp\test.php в строке 6 - person suraj mahajan; 10.01.2016
comment
@surajmahajan - код ожидает массив $opts с информацией о пользователе/базе данных. Я отредактировал ответ, чтобы привести пример. - person Christopher Ellis; 11.01.2016

Спасибо @Topher, однако небольшое предложение. Безопасно сначала создать пользователя, а затем БД:

// user creation
$usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass));   

и БД,

// database creation    
$createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename)); 
person Amar Pratap    schedule 17.01.2016