2010-12-17 38 views
0

サイト内で使用されているデータベース内の情報を更新するために、毎日一連のcronタスクを実行するWebサイトを構築しています。私は3つの環境設定を持っています:開発(私のコンピュータ)、ステージングとライブ。ステージングとライブの両方が共有ホスティングのアカウントです。私が持っている問題は、コードが実行されている環境に応じて、使用するデータベースアクセス資格情報を決定することです。理想的には3つすべて同じ資格情報を持っていますが、ステージングとライブの両方が共有サーバー上にあるため、データベースの名前を制御することはできません。自分のコンピューター上でライブデータベース名とアクセス資格情報をミラーリングしましたが、ステージングではこれを実行できません。Cronジョブがステージングサーバー上で実行されているかどうかの検出

if(environment === staging) { 
    //define db access constants for staging here 
else { 
    //define db access constants for live or dev here 
}} 

通常、この種のもののために私は$ _SERVER [使用したい:私のcronタスクは、このような何かを実行したときに

私は何をしたい、自動的に正しい環境のための正しい資格情報を選択することです'SERVER_NAME']、これはCronで実行されているため、$ _SERVER auto globalは使用できません。どのような環境でスクリプトがcronジョブで実行されているかをどのように検出できますか?

答えて

1

あなたは、crontabファイル内の余分な環境変数を入れることができます:

STAGING=1 

、その後$_ENV['STAGING'] == 1をチェック。

あるいは

HOSTING_ENV=PRODUCTION 

、その後$_ENV['HOSTING_ENV'] == 'PRODUCTION'をチェック。

+0

は、配列にアクセスするときに '{'と ']'ではなく '{'と '}'でなければなりません。 – scoates

+0

ありがとう、私はこれが私に解決策を与えたと思います。 $ argvに表示されるコマンドラインパラメータを使って変数をスクリプトに渡します。ステージングで追加のパラメータを渡すだけで、これを使用して使用する資格情報を決定します。 – Jeremy

+0

私はCPanelインターフェースを通してサーバーにしかアクセスできないので、私はcrontabファイルにアクセスできないことを明確にすべきです。 – Jeremy

1

ajrealとgms8994の両方が良い環境変数があります。もう一つの方法は、現在のホスト名を取得するためにphp_uname()を使用することです:

[email protected]:~$ php -r 'echo php_uname("n") . "\n";' 
gimmebarvm-sean 
+0

ありがとうSean、それは良い考えです。 – Jeremy

1

は、あなたがそのことにより、プラットフォームを検出することができますではなく、PHPのコマンドラインでドメインによって

それを呼び出すことによって、WGET経由でのcronを実行しますドメイン

関連する問題