PHPのコマンドライン実行

兄弟サイトで毎日バッチ処理をしているんだけど、一部がperlだったり、一部がPHPでwebから都度実行しなくちゃいけなかったり。。。 外部webページを取りこんで、データ要素を抽出してDBに登録するんだけど、webページ取得はperlでcron起動、DBアクセスはPHPのほうがお手軽だからそっちで作っちゃったりして。

でも、毎日は欝陶しいし、1つのスクリプトですべてをまかないたくなる。今さらperlと格闘するのも悲しいからPHPをコマンドライン(cron)から起動させて、一石二鳥を狙おうかな、と。

まずは今までperlで動いていたところをPHP化する。結構両者で考え方が違うことを再認識した。特に正規表現のあたり。正規表現自体は共通だけど、それを取り巻く命令群の性格が違うからちょっと苦労した。

大体1つのスクリプトにいままでのコンポーネントが一体となったあたりでコマンドライン化に取り掛かろう。って、基本的には#!/usr/bin/php -qを先頭行に付け加えて、# chmod 755 hogehoge.phpと実行権限をつけてあげるだけ。

では、ないんだな。コマンドライン版PHP(CLI版)の設定、文法チェックがApacheに取り込まれているものと微妙に違う。Webでは出ないエラーがワラワラとでてくる。配列を定義しないで使うとエラー(警告)が出るらしい。

そういうときにはerror_reporting(0);を冒頭に追加すると静かになる。もちろん、バグが取れてきて安定してきたら、の話だけど。

さらに、PostgreSQLを使っているんだけど、webで起動されるスクリプトからはDBにアクセスできても、コマンドラインからの起動ではアクセスできないようにdefaultではなっている。そこは /var/lib/pgsql/data/pg_hba.conf にて、#local all all ident sameuser(←コメントアウトする)
local all all trust
と、ローカル環境においては実行ユーザをDBユーザとは別にできるよう設定を変更する。

うまくいくと# ./hogehoge.phpとやるだけで、起動することができる。これをcrontabに登録しておけばOK!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です