php - 使用外部脚本从具有不同数据库的多个 wordpress 站点获取前缀

标签 php mysql wordpress

我正在尝试获取具有不同前缀的 wordpress 安装的多个数据库的前缀。但是没有做到这一点,我只得到所有文件的第一个表前缀:

文件夹结构(基本 - 包含所有必需的 wordpress 文件):

home:
+---cpanel1
|   \---public_html
|       +---wp-load.php => $table_prefix = 'wp1_';
+---cpanel2
|   \---public_html
|       +---wp-load.php => $table_prefix = 'wp2_';
\---cpanel3
    \---public_html
        +---wp-load.php => $table_prefix = 'wp3_';
+---get_prefixes.php

脚本 get_prefixes.php (PHP):

$myfile = '/wp-load.php';
class execute_sql_code {
    public function __construct($myfile) {
        $this->main_work($myfile);
    }
    public $cpanels = array(
            'cpanel1',
            'cpanel2',
            'cpanel3'
    );
    public function main_work($myfile) {
        foreach ($this->cpanels as $cpanel) {
            $the_file = $cpanel.'/public_html'.$myfile;
            var_dump($the_file);
            require($the_file);
            global $wpdb;
            var_dump($wpdb->prefix);
        }
    }
}
new execute_sql_code($myfile);

var_dump($the_file) => 输出正确每条路径。

var_dump($wpdb->prefix) => 每次迭代输出错误 wp1_:

当前输出:

Iteration 1 => cpanel1/public_html/wp-load.php => $wpdb->prefix = wp1_

Iteration 2 => cpanel2/public_html/wp-load.php => $wpdb->prefix = wp1_

Iteration 3 => cpanel3/public_html/wp-load.php => $wpdb->prefix = wp1_

预期输出:

Iteration 1 => cpanel1/public_html/wp-load.php => $wpdb->prefix = wp1_

Iteration 2 => cpanel2/public_html/wp-load.php => $wpdb->prefix = wp2_ // normal

Iteration 3 => cpanel3/public_html/wp-load.php => $wpdb->prefix = wp3_ // normal

最佳答案

试试这个,你需要更改 array("username", "password", "DB1", "localhost") 等配置以连接多个数据库。还要确保每个文件夹的 cpanel wp-load.php 文件加载成功。

使用 new wpdb() 类将创建一个新对象来使用当前数据库或数据库函数。

有关更多信息,我想建议 wordpress stackexchange

$myfile = 'wp-load.php';

class execute_sql_code
{
    public function __construct($myfile)
    {
        $this->main_work($myfile);
    }

    public $cpanels = array(
       'cpanel1' => array("username", "password", "DB1", "localhost"),
       'cpanel2' => array("username", "password", "DB2", "localhost"),
       'cpanel3' => array("username", "password", "DB3", "localhost"),
    );


    public function main_work($myfile)
    {
        $i = 0;
        $cpanelKeys = array_keys($this->cpanels);
        foreach ($this->cpanels as $cpanel) {

            $path = $cpanelKeys[$i];
            $dbuser = ($cpanel[0]);
            $dbpassword = ($cpanel[1]);
            $dbname = ($cpanel[2]);
            $dbhost = ($cpanel[3]);

            $the_file = $_SERVER['DOCUMENT_ROOT'] . '/' . $path . '/public_html/' . $myfile;
            include_once($the_file);

            $wpdb = new wpdb($dbuser, $dbpassword, $dbname, $dbhost);
            $table_name = empty($wpdb->prefix) ? 'wp_' . "options" : $wpdb->prefix . "options";
            $sql = "SELECT option_value FROM " . $table_name . " WHERE option_name = 'siteurl';";
            $root_url = $wpdb->get_var($sql);
            var_dump($root_url);
            echo "<br>";
            unset($wpdb);
            $i++;
        }
    }
}

$obj = new execute_sql_code($myfile);

关于php - 使用外部脚本从具有不同数据库的多个 wordpress 站点获取前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945300/

相关文章:

javascript - 重新编码函数

php - 将 SVG 用于 Wordpress Logo

wordpress - 有没有办法阻止用户访问所有站点,而不仅仅是 wp-login.php

php - 如果重复条目为空,则添加名称 php mysql

PHP 正则表达式 : Replace substring between two special character

mysql - SQL函数应该是大写还是小写?

mysql - 单列与多列设计(针对非主键列)

php - Cakephp模型忽略belongsTo中的条件

php - php中mysql查询错误

php - 使用 find (cakePHP) 时临时删除连接