purazumakoiの[はてなブログ]

技術メモから最近はライフログも増えてきてます。

バックグラウンドでPHPを定期実行する

いやね。PHPをcronで動かすと動かないことがありまして。
該当のファイルをwebからアクセスするといけると。

そんな時は、とりあえず適当にfopenでファイル書き出しで

  • どこまで動いているか
  • サーバ変数の値($_SERVER['SERVER_NAME'])とかがそもそもとれてる?

を調べますが、結構、$_SERVER['SERVER_NAME']とかで開発環境、ステージング、本番と設定を振り分けてると、

バックグラウンドだと$_SERVER['SERVER_NAME']が取れなくて、DB情報とか取得出来てなかったりすることがあります。

なので

<?php
// バックグラウンド(cron)から実行の場合は手動設定
if(!$_SERVER['SERVER_NAME']){
 $path = dirname(__FILE__);
 if(strstr($path,'/var/www/html/')) {
  define('URL', 'http://exsample.com');
 }
		
}

みたいな風にして、サーバ名が取れなかったらファイルパスで本番かどうかを判断する。
※全ての環境でパスが同じ場合はアレですが。


あとDBに接続する場合は、うまく行かない場合

<?php
mysql_connect("localhost:3306", "user", "password")

↑みたいな感じでポート番号もつけたりしたらうまくいくかも。
localhostをIPにしてみたりとか。

CPIの場合はphp5として実行するとmysql4に接続するときデフォルトがmysql5なので・・・
とかある。
なのでphp4.4.7として実行してあげたら3306指定しなくてもmysql4につながった