2017-04-08 11 views
0
$db_connection = $_SERVER['DOCUMENT_ROOT'] . '/includes/install/database_connection.php'; 
if (!file_exists($db_connection)) { 
    require("install/xmlapi.php"); 
    if (isset($_POST['cpname'])) { 
     $opts['user'] = $_POST['cpname']; 
     $opts['pass'] = $_POST['cppass']; 
     $opts['temp'] = substr(str_shuffle(md5(time())),0,'12'); 
     $xmlapi = new xmlapi($_SERVER['HTTP_HOST']); 
     $xmlapi->set_port(2083); 
     $xmlapi->password_auth($opts['user'],$opts['pass']); 
     $xmlapi->set_debug(0); 
     $cpaneluser=$opts['user']; 
     $databasename="OSMP_DAT"; 
     $databaseuser="OSMP_admin"; 
     $databasepass=$opts['temp']; 
     $db = $databasename; 
     $user = $databaseuser; 
     $pass = $databasepass; 
     $loc = 'localhost'; 
     $createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename)); 
     $usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass)); 
     $addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array("".$cpaneluser."_".$databasename."", "".$cpaneluser."_".$databaseuser."", 'all')); 
     include ('install/installer.php'); 
     exit; 
    } 
    if (!isset($_POST['dbhost'])) { include ('install/db_installer.php'); } 
    if (isset($_POST['dbhost'])) { 
      // save connection details to $db_connection 
    } 
} 

上記のコードは完璧に動作します。cpanel mysqlデータベースプレフィックスを取得できますか?

まず、database_connection.phpの存在を確認します。存在する場合は、データベースの詳細を含むファイルが含まれます。

もしそうでなければ、初めてのインストールを想定しています。だから、ユーザにcpanelのログインの詳細を尋ねています。スクリプトはデータベースを作成し、詳細をdatabase_connection.phpに保存します。

唯一の問題は...データベースプレフィックスです。データベースが作成されるとき、WHMにデータベース・プレフィックスがユーザー・アカウント用に設定されている場合は、データベース接頭部がデータベース名の接頭部になります。

接頭辞があるかどうかを判断する方法を知りたい場合は、それが何であるかを調べる方法を知りたいので、スクリプトはデータベース名の前に接頭辞を付けることができます。私は接頭辞が有効になっているのであれば、明らかに、デフォルトでのcPanel/WHM

答えて

0

のcPanelで追加されたようなテーブル接頭辞を求めているのではなく、データベースの接頭辞ではないのです

注アンダースコアが続くものとユーザ名の最初の8つの文字を使用していました。これは、データベース名とデータベース名の両方に使用されます。次のように

はだから、単に上記のコードを変更し:

$db_connection = $_SERVER['DOCUMENT_ROOT'] . '/includes/install/database_connection.php'; 
if (!file_exists($db_connection)) { 
    require("install/xmlapi.php"); 
    if (isset($_POST['cpname'])) { 
     $opts['user'] = $_POST['cpname']; 
     $prefix = substr($opts['user'],0,8).'_'; 
     if ($prefix === FALSE) {$prefix = $opts['user'];} 
     $opts['pass'] = $_POST['cppass']; 
     $opts['temp'] = substr(str_shuffle(md5(time())),0,'12'); 
     $xmlapi = new xmlapi(localhost); 
     $xmlapi->set_port(2083); 
     $xmlapi->password_auth($opts['user'],$opts['pass']); 
     $xmlapi->set_debug(1); 
     $cpaneluser=$opts['user']; 
     $databasename="OSMP_DAT"; 
     $databaseuser="osmp"; 
     $databasepass=$opts['temp']; 
     $pass = $databasepass; 
     $loc = 'localhost'; 
     $createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename)); 
     $usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass)); 
     $addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array($databasename, $databaseuser, 'all')); 
     $db = $prefix.$databasename; 
     $user = $prefix.$databaseuser; 
     include ('install/installer.php'); 
     exit; 
    } 
    if (!isset($_POST['dbhost'])) { include ('install/db_installer.php'); } 
    if (isset($_POST['dbhost'])) { 
     // save connection details to $db_connection 
    } 
} 

はだから今チェックは、ユーザ名の長さを決定するために行われ、8つの文字より長い場合には、8への切り捨てられそしてunderstoreでありますスクリプトの次の部分に渡す変数として追加して出力します。

私が見ることができるように残っている唯一の欠陥は、ホストがwhmのプレフィックスを無効にしている場合です。将来的にはこのコードを使用しようとする人のための

- あなたに注意して作る インクルードファイルを確保するか、あなたはなんと セキュリティ上の問題を持ってしようとしている必要があります。このコードでは誰かが手作業で をインストール/ db_installer.phpにインストールするか、/ installer.phpをインストールして (!file_exists($ db_connection))チェックとif(isset($ _ POST))と (!isset $ _POST ['dbhost']))。

このコードを使用しないでください。

関連する問題