0

ローカルホストとリモートホスト開発を切り替えます。ローカルホストでテストしてから、ファイルをphpのリモートにコピーします。

ホストとuser-dbの情報を定数に格納するクラスMYDBが1つあります。これらの2つのアクセス日を手動で切り替える必要がないように、定数を宣言してMYDBを作成するにはどうすればよいですか?代わりに、自動的に切り替えたいと思います。私が使う:

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

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

ローカルホストに切り替える前に、リモートホストにコメントを付けます。その逆も同様です。これは良くない。何か案が ?ティモ

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.phpSVNによって無視されます。このように、テストファイルが本番環境で終了することはなく、コードのコピーをチェックアウトする人は誰でも、live.phpを新しいtest.phpファイルにコピーして、テスト構成を更新できます。

于 2013-01-18T06:33:38.760 に答える
2

良いについて。他のいくつかのアプローチ

  1. 一部の人々は、本番テストとローカルテストの間で異なるファイルを維持しています
  2. コードをラップアラウンドすることができますif($ product).. 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 に答える