0

我在 localhost 和远程主机 dev 之间进行更改:我在 localhost 上对其进行测试,然后将文件复制到 php 中的远程。

我有一类 MYDB,它将主机和用户数据库信息存储在常量中。如何声明常量并编写MYDB,这样我就不必在这两个访问日期之间手动切换。相反,我想自动切换。我用:

host: localhost
user: timo
db: localhostdb
pwd: ...

 host: remotehostname
 user: timo
 db: remotehostdb
  pwd:..

在切换到 localhost 之前,我会评论远程主机,反之亦然。情况不妙。任何想法 ?蒂莫

4

3 回答 3

3

我通过将凭据存储在config.live.php文件中来处理此问题,该文件可以被文件的存在覆盖config.test.php

包含配置时:

require_once(file_exists('config.test.php') ? 'config.test.php' : 'config.live.php');

我保持config.live.php版本化config.test.php并被 SVN 忽略。这样,测试文件永远不会在生产中结束,任何签出代码副本的人都可以将 live.php 复制到新的 test.php 文件并更新他们的测试配置。

于 2013-01-18T06:33:38.760 回答
2

关于好。其他一些方法

  1. 有些人在生产和本地测试之间维护不同的文件
  2. 您可以将代码包装在 if($production) .. else ..... 然后自动设置该生产变量。例如,我们根据 URL 进行操作。如果 URL 是生产 URL,则 $production 设置为生产。
于 2013-01-18T06:30:47.373 回答
2

我是如何解决的:

类 MyDB {

private static $db;

static public function getInstance($Start = false) {

if ($_SERVER['SERVER_NAME'] == 'localhost') {

/*  $DB_HOST = 'localhost'; 
    $DB_DATABASE = ''; 

    $DB_USER = ''; 
    $DB_PASSWORD = '';
*/  
    $aConnection = array('DB_HOST' => 'localhost', 'DB_DATABASE' => '', 'DB_USER' => '', 'DB_PASSWORD' => '');
} else {

    $aConnection = array('DB_HOST' => 'd', 'DB_DATABASE' => '', 'DB_USER' => '', 'DB_PASSWORD' => $DB_PASSWORD);

}

    if (!self::$db) {
        self::$db = new PDO('mysql:host=' . $aConnection['DB_HOST'] . ';dbname=' . $aConnection['DB_DATABASE'] , $aConnection['DB_USER'], $aConnection['DB_PASSWORD'], array(PDO::ATTR_PERSISTENT => true, 
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC));
    }

    echo mysql_error();

    if ($Start)
        return $aConnection;
    else #Normale pdo klasse
        return self::$db;
}

}

所以如果我需要一个正常的mysql连接,我使用数组,如果我需要PDO,我使用静态db变量。

于 2013-01-18T18:26:56.603 回答