2017-12-30 25 views
1

ショートストーリー:PHPスクリプトファイルが実行されている場合に、PHP $ _SERVER []変数が使用できない(唯一の)問題を探していますWindowsタスクスケジューラのスケジュールされたイベントから取得します。

私は、両方のサーバーで動作するPHPバージョン7.1のWindows 2008 R2サーバーを2台持っています。私はサーバー#1 'プロダクション'とサーバー#2 '開発'を呼びました。各サーバーには独自のMySQLデータベースがあります。

私が書いたページでは、MySQLデータベースの読み込み/書き込みのために、$ _SERVER ['SERVER_NAME']を使ってスクリプトを実行しているサーバーを特定しています現在のサーバが本番サーバの場合は、本番データベースのIPを使用してください)。

それは私にとって完璧に機能します。ただし、Windowsタスクスケジューラを使用して自動化タスクをスケジュールする場合は例外です。この場合、私はそのデータベースからいくつかの情報を電子メールで送信するための単一のスタンドアロンのPHPスクリプトファイルを作成しています。中デシベル結果からいくつかの情報を電子メールで送信するための

PHPスクリプトファイル:

$ _SERVERでブラウザの結果でページを実行
  • [「SERVER_NAME」] が定義されている(良い作品)。
  • Windowsタスクスケジューラが、これは$ _SERVERになりPHP ページを実行している場合は[「SERVER_NAME」]

を定義されていない、誰もが私が$ _SERVERを作ることができる方法を知っているだろう[]の.phpファイルに利用可能な変数Windows Scheduled Taks(タスクスケジューラはもちろんこのスクリプトの.phpファイルの審判でPHP.exeを指し示しています)によって実行されていますか?または、スクリプトが実行されているサーバーの名前を検出する$ _SERVER []変数以外の方法がありますか?

+0

タスクスケジューラとはほとんどされています。 CLIで実行されているスクリプトでは、HTTPサーバー環境変数は使用できません。ラッパースクリプトなどを使用します。 – mario

+0

これは私がしていることです:私のスケジュールされたタスクは、各タスク用に設計された特定の 'api'サーブレットに対して、サーバーにhttp要求を発行するためにcurlを使用する小さなPHPスクリプトです。 – YvesLeBorg

+0

ニース。ありがとうございました。 – Reno

答えて

0

あなたは、環境変数を使用することができます。

echo $_ENV['COMPUTERNAME']; 

だけvariables_orderは、このようなEGPCSなどEを含めるようにphp.iniで正しく設定されていることを確認してください。

または:ここ

echo getenv('COMPUTERNAME'); 
0

は私のCentOSのソリューションです。 Windowsのソリューションとは少し異なります。しかし同じ精神で。基本的に私はサブドメイン(vsサーバ名)でcronジョブにタグを付けるだけです。次に、これがlocalhostまたはapacheから実行されているかどうかを確認し、必要に応じてserver変数に$ cron_hostを代入します。

クロン:

#crontab -u apache -e 
30 3 * * * php /var/www/vhosts/the/script.php -h=staging.domain.com -t=11:30 

cron_file.php:

// get hostname from varg 
$opts = getopt("h:t:"); 
$cron_host = $opts['h']; // which host to load from creds file 
$time_max = $opts['t']; // time parameter for database call 

creds_file.php:

$localhost = array('127.0.0.1', '::1'); 
$is_localhost = (!is_array($_SERVER) || !isset($_SERVER['REMOTE_ADDR']) || in_array($_SERVER['REMOTE_ADDR'], $localhost)) ? true : false; 
$cron_host = (isset($cron_host)) ? $cron_host : false; 
$host_name = ($is_localhost) ? $cron_host : ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']); 
関連する問題