CakePHP 2.3.5.で、データベースの内容が文字化けするときのチェック項目

文字コードってやっかいですよね。今回もはまりました。次またやるときもはまるんだろうなぁ・・・orz

まずは、データベースの「照合順序」が「utf8_general_ci」であることの確認。

次に今回はまった「my.cnf」の内容確認

変更前

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

変更後

[client]
default-character-set = utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-character-set-client-handshake
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

変更後は

#/etc/init.d/mysqld restart

mysqlの再起動が必要。

参考サイト

ぼーず奮闘記」様の

XAMPP環境で文字化け

————————————–

com.posed」様の

CakePHPでDBのデータが文字化け – com.posed

CakePHPの命名規則を一発変換してくれる超便利サイト

久しぶりにCakePHPを触って、しょっぱなからつまづきっぱなしorz。

入力先のデータベースのテーブルを作る際に、きちんとした英語の複数形が必要だったりといろいろと面倒で、明日からがんばる・・・・ってなりそうなんだけど、そんな憂鬱を吹き飛ばしてくれる超便利サイトがあるので、そのご紹介

CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions

です。ただ単に英語表記を変換してくれるだけでなく、CakePHPの単語変化関数を使用しているというスグレモノ。禁止ワードとかを気にすることなく安心して使える。

CakePHP1.3.13 + PHP5.3.8 で表示されるワーニングの表示回避方法

ダウンロードしてきたCakePHP1.3.13の圧縮ファイルを解凍して、WEBの公開用フォルダに設置して、まず、CakePHPのフォルダを管理ユーザーに変更して、初期設定の一発目に「/CakePHP/app/tmp」の所有を「apache」に変更するといきなりワーニング・・・。

Warning (2): strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead [CORE/cake/libs/cache.php, line 597]

PHPのバージョンが5.1.6のときは確かでなかった(と思う。)が5.3.8になったのが原因らしい。詳しくはわからないがtimezone関係らしい気がするけど、なぜ、CakePHPのテンポラリィフォルダをapacheの所有にするとこのワーニングが出るのか?不思議???まぁ、いいや・・・。

っで、回避方法

#vi /CakePHP/app/config/core.php

core.phpをテキストエディタで開き

248行目あたりの

//date_default_timezone_set(‘UTC’);

のコメントアウトを解除して

date_default_timezone_set(‘UTC’);

とすることで回避できる。

参考サイト

http://techracho.bpsinc.jp/baba/2009_11_25/664

CentOS5のPHPを 5.1.6 → 5.3.8 へバージョンアップする手順 その2

以前、PHPのバージョンアップの手順をアップしたが、いろいろ検証してみたところ下記の方法が問題がないようである。

まず、既存のPHP5.1.6を削除する。

#yum remove php

レポジトリを登録して、レポジトリを使用してアップデートする。

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

—————————————————————————————————

追記 2012.3.1

上記URLに接続できなくなっているようなので下記URLにて対処

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

—————————————————————————————————

# rpm -Uvh http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm

# yum –enablerepo=remi update

このアップデートで削除されたPHPが最新版でインストールしなおされる。

だが、足りないものがあるので、改めてPHPをインストールする

# yum –enablerepo=remi install php php-pdo php-mysql php-mcrypt php-mysql php-pear php-mbstring php-devel

これで不足分がインストールされるので、完了後にhttpdを再起動する

#/etc/init.d/httpd restart

PHPの省略タグについて

PHPを5.1.6→5.3.8にアップグレードした際に、以前作ったWEBアプリのフォーム部分のPHPをスクリプトとして認識していない部分が多数あり、調べてみるとPHPの省略タグが認識されていない。

省略タグを認識させるにはサーバーの「php.ini」の設定を変更する。

#vi /etc/php.ini

229行目あたりに

short_open_tag = Off

というのがあるので「Off」を「On」に修正して保存した後、

#/etc/init.d/httpd restart

とすると省略タグを認識することができた。

しかし、以前の記事にも書いたXHTMLの「<?xml version=”1.0″ ?>」と混合するとか互換性の問題等で省略タグは使用を避けるべきと提言されているそうなので

使わない方向で行くのがベターらしい。

関連記事

CakePHP で「<?xml version=”1.0″ encoding=”UTF-8″?>」を宣言すると 「Parse error: syntax error, unexpected T_STRING in /var/www/html/・・・」とエラーメッセージが表示され真っ白にフリーズするときの対処法

関連サイト

http://phpya.blog117.fc2.com/blog-entry-4.html

http://www.over-rabbit.com/hobby/blog/pc-diary/508