ご無沙汰のFuelPHP

FuelPHPご無沙汰してます。
ブログの更新もご無沙汰していました。

最近FuelPHPを使ったプロジェクトが一段落し、落ち着いていたらなんと!
本番にもろエラーが出力されてましたwwww
忘れてました!

FuelPHPは何もしないと、エラーを優しく丁寧に教えてくれるので、そのまま出力してリリースすると結構とんでもないことになります。

あああぁ、やっちまった/( ^o^ )\ なんてこったい

ということでエラーを出ないように調整。

今回はPDO使ってDBを参照しているんだけども、PHPでのエラー出力は、例外処理の出力と違う!ってわけで、
PHPのエラー出力を制御しても、DB系のエラーでます!

例えば、変なクエリー「 WHERE id in (1,2,)」こんなのが流れてきた場合、PHPのエラーを出力しないようにしてもちゃんと教えてくれます!優しいです!!!てか、当たり前だ!!気づけよもっと前に!

って気づいた後に、あわわわわわわってなって対策しました。


PHPエラーが出ないようにする
こっちは簡単。
publicのindex.php

error_reporting(0);
ini_set('display_errors', 0);

を追記これでPHP系のエラーはでないはず、、、

SQLエラーがでないようにする
PDOの場合、DBのエラーは,Database_Exceptionで管理されているので、こいつを拡張する。

Bootstrapに

Autoloader::add_classes(array(
	// Add classes you want to override here
	// Example: 'View' => APPPATH.'classes/view.php',
        'Database_Exception' => APPPATH.'classes/exception.php',//追記
    ));

「fuel\app\classes」直下にexception.phpというファイルを作成

class Database_Exception extends Fuel\Core\Database_Exception {
    
    public function __construct($message="" , $code="", $e="")
    {
        \Log::error('SQL ERROR',$message . "   " . $code . "   " . $e);
        exit;
    }    
}  

と記述。

例外処理が出た場合にログ出力してexitするようにした。
ログは「fuel\app\logs\年月日」に出るよ

てか、即席なのでこんなんでいいのか不安、、、いい方法教えて下さい。