Есть ли какой-то надежный способ программно создавать базы данных MySQL и пользователей MySQL в общих планах хостинга Linux со страницы PHP? Например, доступ к cpanel или phpmyadmin через API или перехват, если я знаю информацию о доступе к cpanel и / или информацию о моем FTP?
Иногда я вижу это с некоторыми сайтами и продуктами, но не знаю, как они это делают.
Спасибо @Alex C, который меня на правильном пути. Следующее будет работать со многими общедоступными хостинговыми планами, но сначала вы захотите проверить их политики. Мой написал мне обратно в билет технической поддержки и сказал: «Вам нужно автоматизировать с помощью скрипта cpanel». Итак, вот что это.
В приведенном ниже примере я бы уже приобрел root.com в качестве основного корневого домена моего хостингового плана. Мне бы хотелось настроить базу данных с именем «user_myexample» с паролем «myexample», которому были присвоены полные привилегии пользователю «user_myexamp». Если префикс «user_» и «myexamp» выглядит странно – это потому, что cpanel имеет префикс на основе учетной записи пользователя root пользователя в cpanel, а имя пользователя базы данных может быть не более 7 символов.
Чтобы подключиться к Cpanel, чтобы это произошло, я ввел URL-адрес домашней страницы cpanel (которая зависит от плана хостинга), чтобы ее можно было разобрать и повторно использовать. Кроме того, я предоставил информацию пользователя root / cpanel от root.com.
Операторы 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 использует пользователь root с правами root, чтобы добавлять базы данных и пользователей, и если cPanel не предоставляет API для этого (я не думаю, что это так, и я не думайте, что любой здравомыслящий включил бы это на их общем хостинге, если бы они это сделали).