2011-01-12 17 views
3

私はcronで実行したいPHPスクリプトがあります。スクリプトがローカルサーバー、QAサーバー、または運用サーバーで実行されているかどうかによって、異なる構成情報がロードされるはずです。問題は、スクリプトがcronを介して実行されているときに、スクリプトが実行されている環境を特定するために使用する識別可能な$ _SERVER情報がないことです。CRONでPHPスクリプトを実行する際にサーバー情報を取得する

私が考えることのできる唯一のことは、cronジョブ自体がスクリプトにパラメータを付けることでしたが、私はそれをする必要がないより良い方法があることを望んでいました。 cronからスクリプトを実行しているときに、スクリプトが存在するサーバを特定する他の方法はありますか?

ありがとうございました。

+0

どのようにサーバーが異なりますか? IPアドレスを確認し、パスの存在、ファイルの内容を確認してください... – Konerak

+0

'gethostname()'? –

+0

私はPHP 5.2を使用しているため、gethostname()は使用できません。そして、$ _SERVER変数なしでIPアドレスを取得する方法がわかりません。さもなければ、サーバは同じコードで設定されているので、パスをチェックするようなことをすることができますが、手動で挿入する必要があります。 – SenorPuerco

答えて

3

私は次の方法で問題を解決します:スクリプト環境変数に渡します。 .htaccessファイル/ httpd.confをする場合には

:クーロンの場合 SetEnv SITE_NAME x1

(スクリプトを実行):

#!/bin/bash 
export SITE_NAME=x1; 
php /path 

両方のケースではPHPコードこの環境変数を取得するには、次のとおりです。 getenv('SITE_NAME');

x1 - サイト名の例です。

+0

それはすばらしい解決策のようですが、それらの環境変数はどのくらい永久ですか?ボックスがリセットされた場合、それらは消えますか? – SenorPuerco

+0

.htaccessファイルやサーバー設定(httpd.confなど)の変数は絶対に永久です。 bashスクリプトでは、PHPスクリプトが実行される前に変数がランタイムごとに設定されます。あなたはcron(直接PHP呼び出しではない)からシェルスクリプトを実行するだけです。したがって、このソリューションは「永久的」であり、長い間、私にとって適切に機能します。 –

+0

ああ待って、私は今参照してください。私が実行するスクリプトは、スクリプトを実行する前に変数を追加します。それは最高です。ありがとう! – SenorPuerco

0

のgetenv(「COMPUTERNAME」)は...

を、それが実行されているコンピュータ名を返します。しかし、あなたのスクリプトは、テストに生産の異なるものをない場合、どのようにあなたはそれが生産に正確であることを知っていますか?

+0

私はそれを試しても何も返されません。そして、スクリプトは何もしません、それはちょうど異なる設定変数を持っています。たとえば、データベース接続情報は異なります。 – SenorPuerco

+0

要求された解決策を使用して、適切な構成ファイル(データベース接続設定など)を選択できます。それは悪い習慣ではないようです。このテクニックはサイト名を検出するために使用しています。これは、専用のサーバー上の仮想ホストを使用して、1つのコードコピーで異なるサイトを実行しているためです。 –

関連する問題