使用环境变量覆盖核心Magento DB连接

时间:2014-04-22 14:01:35

标签: php .htaccess magento database-connection

我正在尝试使用加载到我的Magento应用程序中的环境变量来覆盖默认的数据库连接凭据。

我已经设法'几乎'使用getenv('MY_CUSTOM_VAR')来使用它,但是我试图使用相同的方法来覆盖数据库凭据,因此这些敏感数据可以存储在htaccess中。< / p>

e.g

# .htaccess file
 SetEnv DB_USERNAME root
 SetEnv DB_PASSWORD password123
 SetEnv DB_HOST localhost

我的App.php(在app / code / local / Mage / Core / Model / App.php中 - 来自核心池的副本)

// my function that overrides the core one
protected function _initBaseConfig()
{
    Varien_Profiler::start('mage::app::init::system_config');
    $this->_config->loadBase();

    /* Read DB connection config from environment variables */
    $connection = $this->_config->getNode('global/resources/default_setup/connection');
    $connection->setNode('host', getenv('DB_HOST'));
    $connection->setNode('username', getenv('DB_USERNAME'));
    $connection->setNode('password', getenv('DB_PASSWORD'));

    Varien_Profiler::stop('mage::app::init::system_config');
    return $this;
}

我希望刚刚创建的$ connection是站点范围内使用的默认全局数据库连接,这段代码看起来应该这样做但是如果我为DB_HOST / DB_PASSWORD等输入纯随机条目..它仍然连接到数据库表明它没有覆盖使用Magento设置配置的默认数据库设置。

有关如何使此$连接覆盖并成为“全局”数据库连接的任何想法?

如果这个问题与我之前的问题相似,请提前道歉。原始问题是一个普遍的问题,而这个问题则更侧重于特定部分。

...更新 我已在app / etc目录中打开local.xml,并将'default setup'数据库连接设置为inactive(通过将活动节点值更改为0),这将按预期返回错误。看起来覆盖的功能似乎并不想覆盖最初的数据库连接..任何想法的人?

1 个答案:

答案 0 :(得分:2)

对于MySQL db,你可以做下一步:

  1. 将文件lib / Zend / Db / Adapter / Mysqli.php复制到app / code / local / Zend / Db / Adapter / Mysqli.php
  2. 打开app / code / local / Zend / Db / Adapter / Mysqli.php并找到_connect()函数。
  3. 在第317行附近的此功能中,您将看到:

    $ _ isConnected = @mysqli_real_connect(
        $这 - &GT; _connection,
        $这 - &GT; _config [ '主机'],
        $这 - &GT; _config [ '用户名'],
        $这 - &GT; _config [ '密码'],
        $这 - &GT; _config [ 'DBNAME'],
        $端口
    );

  4. 重新定义参数:

    $ this-&gt; _config ['host'] = getenv('DB_HOST');
    $ this-&gt; _config ['username'] = getenv('DB_USERNAME');
    $ this-&gt; _config ['password'] = getenv('DB_PASSWORD');

    $ _ isConnected = @mysqli_real_connect(
        $这 - &GT; _connection,
        $这 - &GT; _config [ '主机'],
        $这 - &GT; _config [ '用户名'],
        $这 - &GT; _config [ '密码'],
        $这 - &GT; _config [ 'DBNAME'],
        $端口
    );

  5. 清除缓存并重启MySQL。对于其他数据库,请检查lib / Zend / Db / Adapter文件夹中的文件(DB2.php,Oracle.php,Sqlsrv.php)。