通过php脚本创建cpanel数据库
我正在尝试使用cpanel/whm和postwwwacct php脚本自动安装一些自定义软件。这需要将文件复制到用户的public_html文件夹,然后编辑配置并设置eh文件权限。到目前为止还不错,没有问题。在尝试创建数据库时,我遇到了一些问题通过php脚本创建cpanel数据库,php,cpanel,Php,Cpanel,我正在尝试使用cpanel/whm和postwwwacct php脚本自动安装一些自定义软件。这需要将文件复制到用户的public_html文件夹,然后编辑配置并设置eh文件权限。到目前为止还不错,没有问题。在尝试创建数据库时,我遇到了一些问题 $db_create= $opts['user']. '_lol'; $db_host="immersion-networks.com"; include("xmlapi.php"); $xmlapi = new
$db_create= $opts['user']. '_lol';
$db_host="immersion-networks.com";
include("xmlapi.php");
$xmlapi = new xmlapi($db_host);
$xmlapi->password_auth("".$opts['user']."","".$opts['pass']."");
$xmlapi->set_debug(1);//output actions in the error log 1 for true and 0 false
$xmlapi->set_output('array');//set this for browser output
//create database
$createdb = $xmlapi->api1_query($opts['user'], "Mysql", "adddb", array($db_create));
//create user
$usr = $xmlapi->api1_query($opts['user'], "Mysql", "adduser", array($db_create, $opts['pass']));
//add user
$addusr = $xmlapi->api1_query($opts['user'], "Mysql", "adduserdb", array($db_create,$db_create, 'all'));
其余代码运行正常,但数据库没有被创建,用户也没有。
有什么想法吗?cPanel不允许您在cPanel网络主机上直接从MySQL/PhpMyAdmin创建数据库。每次需要一个新的数据库时,您都必须登录到cPanel并使用它的界面来创建数据库。 cPanel数据库创建者将使此过程更加容易。为了在宿主服务器上创建数据库,您只需要从浏览器、shell或cron作业运行此脚本,并将数据库名称作为参数传递 在使用此脚本之前,您需要使用cPanel用户名、密码和主机名(域或IP)对其进行更新 用法:cpanel\u create\u db.php?db=database name&user=username&pass=password 其中数据库名称应替换为要在宿主服务器上创建的数据库名称。 数据库创建者还将创建一个数据库用户,并将其分配给具有所有权限的数据库。如果省略用户参数,脚本将不会创建数据库用户。在本例中,用法是cpanel\u create\u db.php?db=数据库名称 注意:如果脚本不工作,请尝试通过cURL运行它。这需要在服务器上安装cURL。默认的cURL路径设置为/usr/bin/cURL。如果托管服务器上的cURL路径不同,可以在脚本代码中随意更改它 试试这个
<?php
###############################################################
# cPanel Database Creator 1.2
###############################################################
# Visit http://www.zubrag.com/scripts/ for updates
###############################################################
// cPanel username (you use to login to cPanel)
$cpanel_user = "user";
// cPanel password (you use to login to cPanel)
$cpanel_password = "password";
// cPanel domain (example: mysite.com)
$cpanel_host = "host";
// cPanel theme/skin, usually "x"
// Check http://www.zubrag.com/articles/determine-cpanel-skin.php
// to know it for sure
$cpanel_skin = "x";
// Script will add user to database if these values are not empty
// User wil have ALL permissions
$db_username = '';
$db_userpass = '';
// Update this only if you are experienced user or if script does not work
// Path to cURL on your server. Usually /usr/bin/curl
$curl_path = "";
//////////////////////////////////////
/* Code below should not be changed */
//////////////////////////////////////
function execCommand($command) {
global $curl_path;
if (!empty($curl_path)) {
return exec("$curl_path '$command'");
}
else {
return file_get_contents($command);
}
}
if(isset($_GET['db']) && !empty($_GET['db'])) {
// escape db name
$db_name = escapeshellarg($_GET['db']);
// will return empty string on success, error message on error
$result = execCommand("http://$cpanel_user:$cpanel_password@$cpanel_host:2082/frontend/$cpanel_skin/sql/adddb.html?db=$db_name");
if(isset($_GET['user']) && !empty($_GET['user'])) {
$db_username = $_GET['user'];
$db_userpass = $_GET['pass'];
}
if (!empty($db_username)) {
// create user
$result .= execCommand("http://$cpanel_user:$cpanel_password@$cpanel_host:2082/frontend/$cpanel_skin/sql/adduser.html?user={$db_username}&pass={$db_userpass}");
// assign user to database
$result .= execCommand("http://$cpanel_user:$cpanel_password@$cpanel_host:2082/frontend/$cpanel_skin/sql/addusertodb.html?user={$cpanel_user}_{$db_username}&db={$cpanel_user}_{$db_name}&ALL=ALL");
}
// output result
echo $result;
}
else {
echo "Usage: cpanel_create_db.php?db=databasename&user=username&pass=password";
}
?>
上面的代码对我有用!
需要确保您使用的是cpanel用户/pass而不是root,并且您使用的是没有xmlapi的端口2083
function createDb($cPanelUser,$cPanelPass,$dbName) {
$buildRequest = "/frontend/x3/sql/addb.html?db=".$dbName;
$openSocket = fsockopen('localhost',2082);
if(!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest ."\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while(!feof($openSocket)) {
fgets($openSocket,128);
}
fclose($openSocket);
}
function createUser($cPanelUser,$cPanelPass,$userName,$userPass) {
$buildRequest = "/frontend/x3/sql/adduser.html?user=".$userName."&pass=".$userPass;
$openSocket = fsockopen('localhost',2082);
if(!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest ."\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while(!feof($openSocket)) {
fgets($openSocket,128);
}
fclose($openSocket);
}
function addUserToDb($cPanelUser,$cPanelPass,$userName,$dbName,$privileges) {
$buildRequest = "/frontend/x3/sql/addusertodb.html?user=".$userName."&db=".$dbName.$privileges;
$openSocket = fsockopen('localhost',2082);
if(!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest ."\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while(!feof($openSocket)) {
fgets($openSocket,128);
}
fclose($openSocket);
}
//Create Db
createDb('CpanelUser','cPanelPass','dbName');
//Create User
createUser('cPanelUser','cPanelPass','dbUsername','dbUserPass');
//Add user to DB - ALL Privileges
addUserToDb('cPanelUsername','cPanelPass','dbUsername','dbName','&ALL=ALL');
//Add user to DB - SELECTED PRIVILEGES
addUserToDb('cPanelUsername','cPanelPass','dbUsername','dbName','&CREATE=CREATE&ALTER=ALTER');
这个对我有用。我在@brunofitas answer上做了一些更新
<?php
$database_name = "dbname"; //without prefix
$database_user = $database_name; //database name and database username are both similar, change the value if you want
$database_pass = "random_password";
$cpanel_username = "my_cpanel_username";
$cpanel_pass = "my_cpanel_password";
$cpanel_theme = "paper_lantern"; // change this to "x3" if you don't have paper_lantern yet
function createDb($cpanel_theme, $cPanelUser, $cPanelPass, $dbName)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/addb.html?db=" . $dbName;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
function createUser($cpanel_theme, $cPanelUser, $cPanelPass, $userName, $userPass)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/adduser.html?user=" . $userName . "&pass=" . $userPass;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
function addUserToDb($cpanel_theme, $cPanelUser, $cPanelPass, $userName, $dbName, $privileges)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/addusertodb.html?user=" . $cPanelUser . "_" . $userName . "&db=" . $cPanelUser . "_" . $dbName . "&privileges=" . $privileges;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
//Create Db
createDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_name);
//Create User
createUser($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_pass);
//Add user to DB - ALL Privileges
addUserToDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_name, 'ALL PRIVILEGES');
//Add user to DB - SELECTED PRIVILEGES
//addUserToDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_name, 'DELETE,UPDATE,CREATE,ALTER');
对我不起作用,我在我的postwwwacct脚本中使用了这个。我甚至尝试手动输入链接来替换我的详细信息。仍然没有创建数据库。请参见此url http://$cpanel_user:$cpanel_password@$cpanel_host:2082/frontend/$cpanel_skin/sql/adddb.html?db=$db_name在我替换登录详细信息、主机名、皮肤、数据库名称后,会将我带到cpanel登录页面。但是,如果我已经登录到cpanelDB,则会正常工作。当我使用此项时,用户未被授予权限,可能是因为在设置变量时,我已经将cPanel用户名包括在$databasename
和$databaseuser
中了。要解决此问题,请将最后一行替换为:$addusr=$xmlapi->api1_查询($cpaneluser,'Mysql','adduserdb',array('.$databasename'.'','.$databaseuser'.'','all')
基本上从查询中删除了$cpaneluser
。这是一篇非同寻常的帖子!!我在stackoverflow见过。。。只是好奇如何以同样的方式删除数据库。因为在我的codeigniter应用程序中,使用dbforge我无法删除数据库…问题AddUseTodb:添加用户,但没有添加所有权限我解决了这个问题。方法:addUserToDb将值变量从addUserToDb.html?user=“.$userName.”&db=“.$dbName.$privileges”更改为addUserToDb.html?user=“.$userName.”&db=“.$dbName.&privileges=“.$privileges and call Method:addUserToDb('cpanelass'、'cPanelPass'、'dbUsername'、'dbName'、'CREATE、ALTER、DELETE、UPDATE');如果此答案不适用于您,请尝试更改$buildRequest字符串的x3
部分。(如果您登录到您的cPanel,您可以从浏览器地址栏中的实际cPanel URL中看到x3
的替代项。)对于addUserToDb()函数,我必须将'&privileges=ALL'
作为最终参数值传递。还要注意,传递给createDb()的db名称没有前缀,而是db名称(和用户名)传递给addUserToDb()时不需要前缀。
<?php
$database_name = "dbname"; //without prefix
$database_user = $database_name; //database name and database username are both similar, change the value if you want
$database_pass = "random_password";
$cpanel_username = "my_cpanel_username";
$cpanel_pass = "my_cpanel_password";
$cpanel_theme = "paper_lantern"; // change this to "x3" if you don't have paper_lantern yet
function createDb($cpanel_theme, $cPanelUser, $cPanelPass, $dbName)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/addb.html?db=" . $dbName;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
function createUser($cpanel_theme, $cPanelUser, $cPanelPass, $userName, $userPass)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/adduser.html?user=" . $userName . "&pass=" . $userPass;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
function addUserToDb($cpanel_theme, $cPanelUser, $cPanelPass, $userName, $dbName, $privileges)
{
$buildRequest = "/frontend/" . $cpanel_theme . "/sql/addusertodb.html?user=" . $cPanelUser . "_" . $userName . "&db=" . $cPanelUser . "_" . $dbName . "&privileges=" . $privileges;
$openSocket = fsockopen('localhost', 2082);
if (!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest . "\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while (!feof($openSocket)) {
fgets($openSocket, 128);
}
fclose($openSocket);
}
//Create Db
createDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_name);
//Create User
createUser($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_pass);
//Add user to DB - ALL Privileges
addUserToDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_name, 'ALL PRIVILEGES');
//Add user to DB - SELECTED PRIVILEGES
//addUserToDb($cpanel_theme, $cpanel_username, $cpanel_pass, $database_user, $database_name, 'DELETE,UPDATE,CREATE,ALTER');