如何以编程方式在共享Linux主机计划上创建MySQL数据库

时间:2010-07-10 15:32:06

标签: php mysql shared-hosting cpanel

是否有一种可靠的方法可以从PHP页面以编程方式在共享Linux主机方案上创建MySQL数据库和MySQL用户?例如,如果我知道我的cpanel访问信息和/或我的FTP信息,可以通过API或钩子访问cpanel或phpmyadmin?

偶尔我会看到一些网站和产品,但不知道他们是如何做到的。

2 个答案:

答案 0 :(得分:1)

感谢@Alex C让我走上正轨。以下内容适用于许多共享主机方案,但您首先需要检查其策略。我在技术支持票中给我写了回信说:“你必须通过cpanel脚本自动化。”所以,这就是它。

在下面的示例中,我已经购买了root.com作为我的共享主机方案的主要根域。我想要设置一个名为“user_myexample”的数据库,密码为“myexample”,并为用户“user_myexamp”分配了完全权限。如果“user_”前缀和“myexamp”看起来很奇怪 - 这是因为cpanel有一个基于root用户的用户帐户的前缀到cpanel,而数据库用户名最多只能是7个字符。

要连接到Cpanel以实现此目的,我输入了一个cpanel主页URL(随主机方案而变化),以便可以对其进行解析和重用。另外,我提供了root.com的cpanel用户/通行证信息。

echo语句只是每个HTTP GET请求是否有效的输出响应。您可能需要检查一下,看看是否可以解析该输出中的成功/失败。

请注意,某些托管计划会阻止连接到网址的file_get_contents,因此您可能需要使用fopen($ sURL,'r')或Curl API进行切换。

<?php

// @ input vars
$sPastedCpanelHomepageURL = 'https://root.com:2083/frontend/x3/index.html';
$sNewDB = 'myexample';
$sNewDBUser = 'myexamp'; // must be 7 chars max
$sNewDBPass = 'myexample';
$sCPanelUser = 'user';
$sCPanelPass = 'pass';

// @ processing
$sCP = dirname($sPastedCpanelHomepageURL);
$sCP = str_replace('://','://' . $sCPanelUser . ':' . $sCPanelPass . '@',$sCP);

$sPrefix = substr($sCPanelUser, 0, 7) . '_';

$sTask1 = '/sql/addb.html?';
$sTask2 = '/sql/adduser.html?';
$sTask3 = '/sql/addusertodb.html?';

$sNewDB = urlencode($sNewDB);
$sNewDBUser = urlencode($sNewDBUser);
$sNewDBPass = urlencode($sNewDBPass);
$sCPanelUser = urlencode($sCPanelUser);
$sCPanelPass = urlencode($sCPanelPass);

$sNewDBUser = substr($sNewDBUser, 0, 7);

$asData1 = array(
  'db' => $sNewDB
);
$sData1 = http_build_query($asData1);
$s = file_get_contents($sCP . $sTask1 . $sData1);
echo "$s\n";

$asData2 = array(
  'user' => $sPrefix . $sNewDBUser,
  'pass' => $sNewDBPass,
  'pass2' => $sNewDBPass
);
$sData2 = http_build_query($asData2);
$s = file_get_contents($sCP . $sTask2 . $sData2);
echo "$s\n";

$asData3 = array(
  'user' => $sPrefix . $sNewDBUser,
  'db' => $sPrefix . $sNewDB,
  'update' => '',
  'ALL' => 'ALL'
);
$sData3 = http_build_query($asData3);
$s = file_get_contents($sCP . $sTask3 . $sData3);
echo "$s\n";

答案 1 :(得分:0)

赋予共享用户权限以执行cPanel以外的任何操作似乎完全没有使用cPanel,所以我建议他们可能不会这样做。您的cPanel访问信息和您的FTP信息与MySQL几乎没有关系 - cPanel使用MySQL根授权用户添加数据库和用户,除非cPanel公开API来执行此操作(我不认为这样做,而且我如果他们这样做,不要认为任何理智的人都会在他们的共享主机上启用它。)