1

私は最近、自分のWebサイトファイルを任意のパスで機​​能するファイルに変換することにしました。.htaccessメインの本番サーバーと同じファイルを維持できるように、仮想ホストの使用に取り組んでいます。すべてのモデルを含む初期化ファイルは、正確なシステムファイルパスを見つけてそれに応じてWebサイトを更新するために動的に書き込まれるため、Webサイト全体をどこにでもアップロードできます。

問題は設定ファイルにあります。devとprodのどちらを使用しているかに応じて、別のデータベースに接続します。したがって、最初にローカルサーバーを実行しているかどうかを確認するための小さなチェックがあります。これを行うには、開発者の命名規則を配列に格納し、配列をループしてHTTP_HOSTが値と一致するかどうかを確認します。

例:

$dev_names = array('localhost','.dev');

しかし、先日チャットでこれについて言及したとき、尊敬されているユーザーは、彼は決してこれをしないと私に言いました。代わりに、彼は2つの構成ファイルを持っており、適切なタイミングで適切なファイルを含めていますか?私のアプローチの何が問題だったのかわかりませんでしたか?

専門家を理解するのに役立つ私の計画の欠陥を指摘してもらえますか?

(追記:ボーナスとして、ブートストラップがどのように機能するかを簡単に説明してください。その単語がスローされているのを聞いたのですが、PHPなどで書かれているかどうかはわかりません。)

4

3 に答える 3

2

私はあなたのアプローチに何も悪いことは見ていません、そして私はそれをしない正当な理由を考えることができません。

個人的には、phpファイルでこれを行います。

 if ($_SERVER['SERVER_NAME'] == 'localhost')
 {
    define('ENVIRONMENT', 'development');
 }
 else
 {
    define('ENVIRONMENT', 'production');
 }

そして、私のすべての構成はそれをぶら下げます。非常にうまく機能します-つまり、開発と本番の間を移動するときに、文字通り構成の変更がありません

于 2012-09-09T11:35:40.830 に答える
1

彼が得ていたのは、あなたのサイトを移植可能にしようとする試みは、実際にはそれほど移植可能ではないということだと思います。新しいサーバーに移動する場合は、構成ファイルを編集する必要があります。

具体的には、これは、構成ファイルをある種のバージョン管理システムにチェックインするときに問題になり、他の誰かに影響を及ぼします。理想的には、次のようなものを使用します。

<?php // global config file which is checked into VCS
    $SETTING = "FOO";
    @include "config/local_settings.php"; // overrides go here
 ?>

すべてのローカル設定のオーバーライドをローカルファイルに入れ、VCSにコミットしないでください。local_settings_example.phpただし、他のユーザーが何をカスタマイズする必要があるかについて注意を喚起するために、そのようなことをコミットすることは完全に一般的です。寛大に感じている場合は、コメント付きの例で埋めることができます。

于 2012-09-09T11:40:00.563 に答える
1

私は自分の好きなセットアップで2セントしか投入できません。主に、望ましくないバージョン管理の上書きや競合を回避するため。私の見解では、変更する必要があるのはスクリプト内の変数ではなく、本番サーバーか開発サーバーかを決定するのはサーバーです。以下の例のようなアプローチにより、完全に異なる開発セットアップで個人の環境を設定することも可能になります。

変数を設定することから始めます

$_SERVER['SERVER_ADMIN'];

本番環境または開発環境を確認します。@ dev.elop.loc(例:dbf@dev.elop.loc)のような、実際には存在しないダミードメインを使用して、自分の名前にローカルで。そのような機能

// environment development check
function __env_dev($check) {
  return substr($_SERVER['SERVER_ADMIN'], -(strlen($check))) === $check; 
}
// false = production
// true = development
__env_dev("@dev.elop.loc");

環境を決定することができます。私の経験では、本番サーバーでは常にSERVER_ADMIN変数が実際のアドレスに設定されており(そうでない場合は、デフォルトのyou@example.comである必要がある場合でも、実際にはそうする必要があります)、デフォルトのyou@example.comを避けます。ライブサーバーのサポートが独自のサービス/メンテナンスにある場合、開発サーバーと区別するために実際のアドレスに変更することは大したことではありません;)

于 2012-09-09T12:42:52.303 に答える