使用PHP获取WordPress数据库名称/用户名/密码

Yar*_*rin 6 php oop wordpress

我正在编写一个WordPress插件,需要读取数据库名称,用户名和密码(为了进行sql转储).这可能吗?

谢谢-

kea*_*tch 15

是的,它们的定义是 wp-config.php

  1. 数据库名称:DB_NAME
  2. 数据库用户:DB_USER
  3. 数据库密码:DB_PASSWORD
  4. 数据库主机:DB_HOST

它们是定义的.在Wordpress的根目录中看到wp-config.php

  • 如果这是一个你要公开提供的插件或提交给WP插件库的插件,我建议不要只是在root中查找wp-config.php的硬编码,而且还要查找上面的wp-config一个目录根[WordPress wp-config安全文档](http://codex.wordpress.org/Hardening_WordPress#Securing_wp-config.php)查看wp-load.php的第26行,了解它们如何查找并包含wp-config .php文件 (3认同)

qui*_*tin 5

Wordpress 在其 OO 代码中存在一些相当愚蠢的东西,这不是我遇到的第一个,因为我们在Moxune的每个后续项目中更深入地挖掘内部结构。请参阅WP_User::__set does not persist custom fields as it Claims

我在这里指的愚蠢之处当然是像表前缀之类的东西,又名wpdb::prefixpublic成员变量,但是像dbnamedbpassworddbhost之类的东西protected并且没有public访问器方法。

我确信 WordPress 核心开发人员之一会尝试为其争论一些基本原理,但同时也可能使用一些好的 'ol OO 来应对。我的建议是,装饰器。

class SaneDb
{
    private $_oDb;

    public function __construct(wpdb $oDb)
    {
        $this->_oDb = $oDb;
    }

    public function __get($sField)
    {
        if($sField != '_oDb')
            return $this->_oDb->$sField;
    }

    public function __set($sField, $mValue)
    {
        if($sField != '_oDb')
            $this->_oDb->$sField = $mValue;
    }

    public function __call($sMethod, array $aArgs)
    {
        return call_user_func_array(array($this->_oDb, $sMethod), $aArgs);
    }

    public function getDbName() { return $this->_oDb->dbname;     }
    public function getDbPass() { return $this->_oDb->dbpassword; }
    public function getDbHost() { return $this->_oDb->dbhost;     }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的插件代码(functions.phpglobal )顶部以类似的方式设置wpdb.

global $sanedb;
$sanedb = new SaneDb($wpdb);
Run Code Online (Sandbox Code Playgroud)

从那里,只需$sanedb在您的插件中使用而不是$wpdb.

最后,获取数据库名称等。

$sanedb->getDbName();
Run Code Online (Sandbox Code Playgroud)