PHPで日本語を含むCSVファイルを読み込んだら日本語だけ消えてしまう時~

本日はPHP 5.3.x上のCakePHP 1.3.xで動くシステムの修正というか、修正するための環境を作りました。

まずはPHP 5.3.xなので

vagrant init bento/centos-6.7
vagrant up

ローカルの開発環境なので関係ないですがCentOS6のPHP 5.3.3について
RHEL/CentOS 6のPHP5.3.3 は安全か? – Qiita
だそうです。

続いて、サーバーにログインして

sudo yum install httpd php
sudo chkconfig httpd on
sudo vi /etc/httpd/conf/httpd.conf(適当に設定)
sudo service httpd restart

とりあえずこれで動かしてみる……むむっ、なんか変。CSVを読み込んで表示する表の中の日本語が出ていなーい。

で、色々調べた結果、fgetcsvって関数がサーバーのロケール設定の影響を受けるとのこと。サーバーのロケールを「ja_JP.UTF-8」に変更するも直らず。CSV読み込みの前でsetlocaleすると表示された、が根本的な解決方法は分からず。CSVはUTF-8です。

まぁ、開発環境だし、修正箇所には関係ないのでいいか~。

ちなみに公式ドキュメントにも書いてありますが getlocaleってのは存在せず、 setlocale(LC_ALL, ‘0’) で現在の設定が返ります。CSV読み込みの前に入れると「C」でした。