今回はCakePHPのデバッグに重要な
DEBUG値とは
DEBUG値は,
app/
/**
* Set debug level here:
* - 0: production
* - 1: development
* - 2: full debug with sql
* - 3: full debug with sql and dump of the current object
*
* In production, the "flash messages" redirect after a time interval.
* With the other debug levels you get to click the "flash message" to continue.
*
*/
define('DEBUG', 1);
DEBUG定数に設定する値は,
DEBUG値「0」は本番用。エラー出力なし
DEBUG値に
PHPでは,
なお,
本番環境では通常,
DEBUG値「1」は通常の開発用。エラー出力あり
DEBUG値に
また,
以下のように末尾に実行時間が出力される
<!-- 0.079s -->
この実行時間出力は,
幸いなことに,
app/
if (Configure::read() > 0) {
echo "<!-- " . round(getMicrotime() - $TIME_START, 4) . "s -->";
}
デフォルトのDEBUG値はこの
DEBUG値「2」はDBへのクエリーのデバッグ情報が出力される
DEBUG値
3 queries took 1 ms
Nr | Query | Error | Affected | Num. rows | Took (ms) |
---|---|---|---|---|---|
1 | DESCRIBE `tasks` | 5 | 5 | 1 | |
2 | SELECT `Task`.`id`, `Task`.`content`, `Task`.`status`, `Task`.`created`, `Task`.`modified` FROM `tasks` AS `Task` WHERE `Task`.`status` = 'yet' ORDER BY `Task`.`created` ASC | 3 | 3 | 0 | |
3 | SELECT `Task`.`id`, `Task`.`content`, `Task`.`status`, `Task`.`created`, `Task`.`modified` FROM `tasks` AS `Task` WHERE `Task`.`status` = 'done' ORDER BY `Task`.`modified` DESC | 1 | 1 | 0 |
この情報の各カラムの意味は以下のとおりです。
- 「* queries took * ms」
実行したクエリの数と, 合計時間です。 - 「Nr」
実行したクエリーの連番です。 - 「Query」
実行したSQL文です。 - 「Error」
クエリがエラーだった場合, エラー情報が入ります。 - 「Affected」
UPDATEやDELETEの際は, 影響した行数が入ります。 SELECTの場合は結果の行数です。 - 「Nom. rows」
結果の行数です。 - 「Took (ms)」
DB上でのクエリの実行時間と考えて差し支えありませんが, CakePHPコア内の処理時間の一部も含まれるため, DB上での実行時間だけとは限りません。APCなどのPHPアクセラレータを導入した際にこの値が短縮されることがあります。
このようにクエリの合計時間とクエリ1つ1つについての情報が列挙されるので,
個人的にはこの出力はCakePHPの目玉機能の1つではないかと思います。