【问题标题】:Configuring MySQL WordPress settings in wp-config.php for local build and live website在 wp-config.php 中为本地构建和实时网站配置 MySQL WordPress 设置
【发布时间】:2016-10-11 06:19:47
【问题描述】:

我正在尝试编辑位于 wp-config.php 的 WordPress 的 MySQL 设置。对于我的站点的实时版本和我的站点的本地版本,我的数据库名称、密码和用户名不同。我正在尝试将其设置为使用一个版本的 MySQL 设置用于我的本地构建,localhost,以及用于网站的实时版本 casetudies.splashworldwide.com 的不同设置。我在下面所做的有什么问题?我怎样才能做到这一点?

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'case-study-wp');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'root');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'casestudies', 'live.domain.url');

/** MySQL database username */
define('DB_USER', 'db_casestudies', 'live.domain.url');

/** MySQL database password */
define('DB_PASSWORD', 'password', 'live.domain.url');

/** MySQL hostname */
define('DB_HOST', 'live.domain.url');

【问题讨论】:

  • PHP 的 define() 不允许您像现在这样为键定义多个值
  • @Liz Banach。我已经为您提出的问题提供了解决方案。请参考并分享想法。
  • defines 分隔在if...else 中:if ($_SERVER['HTTP_HOST'] === 'localhost') { define('DB_HOST', 'localhost'); } else { define('DB_HOST', 'remotehost'); }
  • 嗨,丽兹。很抱歉在不相关的帖子上打扰您,但我想知道您为什么刚刚删除了您最近的问题。这对我来说似乎很好,我正在考虑发布一个答案。那里一切都好吗? (我的意思是,这很好,这真的不关我的事。我只是好奇。)
  • 很遗憾听到这个消息。我真的希望人们不要在“如何”问题上发布“你尝试过什么”类型的 cmets。如果人们尝试了一些有效的方法,他们就不会提出问题。如果他们尝试了一些不起作用的东西,包括那只会在不需要的时候把它变成一个调试问题。

标签: php mysql wordpress


【解决方案1】:

这个 if/else 语句对我有用:

if($_SERVER['HTTP_HOST'] === 'live.domain.url') {
   define('DB_NAME', 'casestudies');
   define('DB_USER', 'db_casestudies');
   define('DB_PASSWORD', 'password');
   define('DB_HOST', 'localhost');
   define('DB_CHARSET', 'utf8mb4');
   define('DB_COLLATE', '');
 }else{
   define('DB_NAME', 'case-study-wp');
   define('DB_USER', 'root');
   define('DB_PASSWORD', 'root');
   define('DB_HOST', 'localhost');
   define('DB_CHARSET', 'utf8mb4');
   define('DB_COLLATE', '');
 }

【讨论】:

    【解决方案2】:

    您只能在 WordPress 中配置一个 define 变量,并且您正在覆盖 WordPress 提供的策略。

    define() - 如果您为单个定义变量提供两个值,因为 PHP 将永远不允许您以这种方式为单个定义名称定义两个值,它会覆盖并且只会采用任何一个一次。

    因此建议每个站点只添加一个配置,并在您上线时尝试更改站点凭据。

    单独保存:本地

    / ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', 'case-study-wp');
    
    /** MySQL database username */
    define('DB_USER', 'root');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'root');
    
    /** MySQL hostname */
    define('DB_HOST', 'localhost');
    
    /** Database Charset to use in creating database tables. */
    define('DB_CHARSET', 'utf8mb4');
    
    /** The Database Collate type. Don't change this if in doubt. */
    define('DB_COLLATE', '');
    

    对于 Live Site,您可以:

    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', 'casestudies');
    
    /** MySQL database username */
    define('DB_USER', 'db_casestudies');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'password');
    
    /** MySQL hostname */
    define('DB_HOST', 'localhost');
    
    /** Database Charset to use in creating database tables. */
    define('DB_CHARSET', 'utf8mb4');
    
    /** The Database Collate type. Don't change this if in doubt. */
    define('DB_COLLATE', '');
    

    【讨论】:

    • 我明白了。但是,我的目标是只维护一个wp-config.php 来维护本项目存储库中的本地主机版本和实时版本。是否可以使用 if/else 语句或类似的语句?
    【解决方案3】:

    在页面顶部设置一个变量,如:

    $live = false;
    

    然后使用 if 语句来定义凭证,例如:

    if($live) {
      define('DB_NAME', 'casestudies');
      define('DB_USER', 'db_casestudies');
      define('DB_PASSWORD', 'password');
      define('DB_HOST', 'localhost');
      define('DB_CHARSET', 'utf8mb4');
    }else{
      define('DB_NAME', 'case-study-wp');
      define('DB_USER', 'root');
      define('DB_PASSWORD', 'root');
      define('DB_HOST', 'localhost');
      define('DB_CHARSET', 'utf8mb4');
      define('DB_COLLATE', '');
    }
    

    然后你只需要进行一项更改,当网站上线时将顶部的 $live 的值更改为 TRUE。

    【讨论】:

      【解决方案4】:

      您可以在本地计算机中设置环境变量以将其识别为开发机器(并确保未在生产服务器上设置环境变量)。

      然后在 wp-config.php 中,您可以轻松检查环境变量的存在并相应地应用不同的配置:

      if(getenv('IS_LOCAL')){
         define('DB_HOST', 'localhost');
         ....
      }else{
         define('DB_HOST, 'mysql.myhost.com');
         ...
      }
      

      我认为这是一种比其他答案更简洁的方法,因为它需要对代码的干扰最小,并且允许您通过简单地启用环境变量来轻松调试生产 WordPress 安装。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-21
        • 2019-04-27
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        相关资源
        最近更新 更多