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については以下。

Unicode - Wikipedia

とは、UTF-8形式で保存されたファイルの先頭につけられる

EF BB BF

という3バイトのバイナリのこと。これはByte Order Markのことで、これに従ってエディタだったりプログラムだったりはUTF-8とかのUnicodeだと判断するというもの。

バイトオーダーマーク - Wikipedia

僕が使ってたサーバーでは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

これでうまく動きましたーーー、勉強になりました。

プログラミングってこういう知識の積み重ねなんだろうなと思う。。

次こういうエラーに出会ったときには即時解決できると思う!