coreserverにおいてcronでwp.xmlrpcクラスを使おうとしたら苦労した話
以前、
CORESERVERでCRONを使う方法と言うことで、起動の仕方は把握していたのですが、
今回、ワードプレスへ投稿するwp.xmlrpcクラスを使用しようとしたところ、
盛大に苦労してしまったので、その記録です。
【とっても便利】WordPressの記事投稿できるクラス『wp.xmlrpc.php』【自動投稿】
ブラウザでphpのアドレスにを開いて起動するのと、cronで起動するのとでは、カレントディレクトリが異なる
まず認識が甘かったのが、他のファイルを読み込む際のパスの書き方。
相対パスで書いてしまっており、読み込みがうまくいかないケースがありました。
基本は絶対パスで書くことですので、下記のphpでまずはパスを知ることが重要です。
<?php //絶対パス echo __FILE__ . '<br />'; //ディレクトリパス echo dirname(__FILE__) . '<br />'; //スクリプト名 echo basename(__FILE__) . '<br />'; //指定した拡張子を取り除いたスクリプト名 echo basename(__FILE__, '.php'); ?>
参考リンク
PHPプログラムにブラウザでアクセスすると実行されるが、cronで実行できない
PHP の include, require で相対パスを指定して読み込む場合のメモ
http://shoyu-ramen23.jugem.jp/?eid=103
coreserverのphpバージョンとwp.xmlrpcのphpバージョン
次につまずいたのが、phpのバージョンです。
wp.xmlrpcはphp5.3から出ないと動かないことを失念しており、
coreserverのデフォルトはphp5.2だったために、クラスが無いと怒られてしまいました。
Class ‘FInfo’ not found
phpinfoでバージョンの確認はしっかりしないといけません。
<?php phpinfo(); ?>そのうえで、coreserverでは.htaccessにphpバージョンを記述する必要があります。
⇒「.php」をCGI版PHP5.3として動かす
cronで起動する場合のphpバージョン
上記を修正して動くか思いきや、動かず。
原因は、
cronのシェルスクリプトで起動させると、.htaccessで記述したphpバージョンで動いてくれないと言う点です。
ブラウザから起動する場合は、.htaccessの記述に従ったphpバージョンで起動するのですが、cronで動かすために用意するシェルスクリプトは、
.htaccessの記述にはしたがわず、シェルスクリプトに記述されたバージョンで起動する点です。
コアサーバーのシェルスクリプトの記述例は以下のようになっています。
#PHP /usr/local/bin/php /virtual/resv/cron_exe.php exit
ですが、このままで記述するとphp5.2で動いてしまいます。
5.3で動かす場合は、書きようにする必要があります。
#PHP /usr/local/bin/php53 /virtual/resv/cron_exe.php exit
こんな記述がまったく見つからず、数日を無駄にしてしまいました。
まとめ
includeを行う場合は、絶対パスで記述する。
phpのバージョンを調べておく。
シェルスクリプトの記述は気を付ける。
参考リンク
cronでPHPを叩くときにハマったことをまとめておきますエックスサーバーのcronでPHPを動かす方法&間違いやすい部分まとめ
PHPプログラムにブラウザでアクセスすると実行されるが、cronで実行できない
xreaでcronを使ってバッチ処理(定時処理)する方法のまとめ エックスサーバーのcronでPHPを動かす方法&間違いやすい部分まとめ
cronからPHPを実行する