CRONでPHPプログラムが走らなかったのはBOMのせいだった
Cronを使ってサーバー上にあげたPHPスクリプトを定期的に走らせたかったのだけど、うまく機能しなくて悩んだ。
下のようなエラーメッセージが...
/bin/sh: /home/sites/heteml/users/d/a/v/davinti/scripts/reset_pv_month.php: cannot execute binary file
なんだろうと思いいろいろググってみると、cannnot excecute binary file
という文面からしてどうやらUnicodeのBOMの問題だと分かった。
cannot execute binary file | 名古屋のホームページ作成システム開発のカシワギWEB製作所
Unicodeについては以下。
とは、UTF-8形式で保存されたファイルの先頭につけられる
EF BB BF
という3バイトのバイナリのこと。これはByte Order Markのことで、これに従ってエディタだったりプログラムだったりはUTF-8とかのUnicodeだと判断するというもの。
僕が使ってたサーバーではUTF-8の形式で保存され、なおかつBOM無しでないとちゃんと読み込んでくれなかったっぽい。
Vimでは、以下のようにすればencodingをUTF-8に指定し、さらにBOMなしで保存することが出来る。
:set fileencoding=utf8 :set nobomb
Vim - General - How to display and remove BOM in utf-8 encoded file
これでうまく動きましたーーー、勉強になりました。
プログラミングってこういう知識の積み重ねなんだろうなと思う。。
次こういうエラーに出会ったときには即時解決できると思う!