是否有一种可靠的方法可以从 PHP 页面以编程方式在共享 Linux 托管计划上创建 MySQL 数据库和 MySQL 用户?例如,如果我知道我的 cpanel 访问信息和/或我的 FTP 信息,则通过 API 或挂钩访问 cpanel 或 phpmyadmin?
有时我会在一些网站和产品上看到这一点,但不知道他们是如何做到的。
是否有一种可靠的方法可以从 PHP 页面以编程方式在共享 Linux 托管计划上创建 MySQL 数据库和 MySQL 用户?例如,如果我知道我的 cpanel 访问信息和/或我的 FTP 信息,则通过 API 或挂钩访问 cpanel 或 phpmyadmin?
有时我会在一些网站和产品上看到这一点,但不知道他们是如何做到的。
感谢@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 连接到 URL,因此您可能必须使用 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";
授予共享用户权限以在 cPanel 之外执行任何操作似乎完全错过了使用 cPanel 的意义,所以我建议他们可能不这样做。您的 cPanel 访问信息和您的 FTP 信息与 MySQL 几乎没有关系——cPanel 使用 MySQL 根授权用户来添加数据库和用户,除非 cPanel 公开 API 来执行此操作(我认为不会,我如果他们这样做的话,不要认为任何理智的人都会在他们的共享主机上启用它)。