code igniterを初めて使うときにはまった4つのポイント
DESCRIPTION
2013-10-12 FuelPHP&CodeIgniter ユーザの集い にて。 http://atnd.org/events/43750TRANSCRIPT
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のコンストラクタで設定を握りつぶしてないか注意
ご清聴ありがとうございました