CodeIgniterを初めて使うときに
ハマった4つのポイント
2013-10-12 noldor
自己紹介
• 名前:竹腰彰成(noldor)
• 所属:株式会社アロハ 代表取締役
• お仕事:ECサイトの構築、保守など
• 最近の興味:嫁(@miccweb)
今日のお話
• 実際に自分がはまった4つをまとめました
– Production環境でエラーログが保存されない
– 上記に対応するとエラーが表示される
– メールが文字化け
– メールが設定無視でwordwrapされる
ここから高橋メ
ソッド風にいき
ます
1つめ
Production環境
でエラーログが
保存されない
まず
使い始めるに
あたりソースを
先頭から確認
index.php
( ゚ Д ゚) …?
index.php
(つд ⊂)ゴシゴシ
_, ._
( ゚ Д ゚) …
_, ._
(#゚ Д ゚)
error_reporting
とは
PHP エラーの出
力レベルを設
定する関数
PHPのエラーロ
グの出力にも
影響する
0(出力なし)で
再設定していた
ので
php.iniのエラー
ログ出力設定
は無視される
Fatalで落ちると
CIのエラー処理
では拾えないこ
とがあるので
php.iniで設定を
しておきたい
すぐさま書き換
えました
これでエラーロ
グが出力されま
す
……が、これが
罠になります
2つめ
Production環境
でエラーが表示
される
さきほど書き換
えた
これを
本番環境で動
作テストします
本番環境は
php.iniで
display_errors =
Off
エラー表示を抑
制します
error_log =
/var/log/php_e
rrors.log
ログに運用時
のエラーも確保
これで本番でも
エラーを追え
る!
なぜだか表示されるんですけど
CIのエラー表示
方法は
デザイン的にき
れいに見せる
ために
自前でエラー表
示している
PHP標準のエ
ラー表示はされ
ない
コード追いまし
た
system/core/common.php
// Should we display the error? We’ll
get the current error_reporting level
and add its bits with the severity bits to
find out.
(意訳)
error_reporting()の
設定レベルのエラー
なら表示するよ
CIが
display_errorを
無視してた
orz
書き換えました
system/core/common.php
一緒に書き換
えました
index.php
development環境では強制的にエラー表示
3つめ
メールで文字化
け
ネットに文字化
け事例報告
あり
メールで文字化
けしている事例
が多い
原因は文字
コード回りなど
など
まあ海外のフレームワークは
だいたい化けるよね;
解決策は複数
提示あり
MY_Emailクラス
を作る方法が
一番楽そう
というわけでコ
ピペ
https://gist.github.com/takekoshi/6931872
に手入れしたものを用意しました
これで文字化
け解決
ように見えて、
実はコンストラ
クタが罠に
いろんなblogに
似通ったコード
がありますが
コンストラクタも
ほぼ共通なの
で要注意
4つめ
メールが設定
無視で
wordwrapされ
る
気づいたのは
行末だけ文字
化け
よく見ると
wordwrapされ
てる
設定ファイルで
offにしてるの
に?
ソースを追いか
けます
system/libraries/Email.php
設定ファイルの読込はコンストラクタ経由
さっきの
MY_Email
コンストラクタ……引数なし
設定値が握り
つぶされてる
orz
対応方法
コンストラクタに
変更はないの
で
削除(オーバー
ライドしない)
まとめ
• Production環境でエラーが保存されない
– error_reporting()を設定し直す
• 上記に対応するとエラーが表示される
– display_errorを無視しないように書き換え
• メールが文字化け
– MY_Emailで対応するがネットから持ってくる場合は注
意が必要
• メールが設定無視でwordwrapされる
– wordwrapが利いてしまう場合はMY_Emailのコンスト
ラクタで設定を握りつぶしてないか注意
ご清聴ありがとうございました

Code igniterを初めて使うときにはまった4つのポイント