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

Preview:

DESCRIPTION

2013-10-12 FuelPHP&CodeIgniter ユーザの集い にて。 http://atnd.org/events/43750

Citation preview

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のコンストラクタで設定を握りつぶしてないか注意

ご清聴ありがとうございました