PHPマニュアルにあるように
この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。
コマンドラインで直接叩くとちゃんと動いているのに、crontabで動くとちゃんと取り込めないという現象に遭遇しました。
0 0 * * * /usr/local/bin/php /home/user/update.php
とたとえばしていた場合は
$ vi /home/user/update.sh export LANG="ja_JP.eucJP" /usr/local/bin/php /home/user/update.php $ chmod 700 /home/user/update.sh
として、crontabは
0 0 * * * /usr/local/bin/php /home/user/update.sh
とすると多分うまくいきます。