2007年03月29日

CakePHPでページ作成にかかった時間を表示する方法

CakePHPはグローバル変数$TIME_STARTにスタートした時間を記録している。(cake/bootstrup.phpで記録しているので多少の誤差はある)

productionモード以外ならHTMLコメントとして最後のほうに出力されている。
(app/webroot/index.phpの85行目あたり参照)

なのでindex.phpの該当箇所を参考にして作成してみた。

ビューファイルに下記コードを挿入する。
(例、app/views/layouts/default.thtmlのfooterのdivに)

<?php global $TIME_START; echo round(getMicrotime() - $TIME_START, 4)."秒"; ?>


エレメント化したいなら、app/views/elements/にtimer.thtmlを作成し上記コードを挿入し、ビューファイルの任意の位置に下記コードを挿入する。

<?php echo $this->renderElement('timer'); ?>



ヘルパー関数にメソッドを追加してほしいな・・・
ラベル:PHP cakephp framework
posted by asaton at 17:11| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年03月28日

CakePHPの本番稼動のerror_reportingについて

CakePHPでサイトを構築する場合、php関連のエラー情報をログに保存しておきたい。

具体的には、app/webroot/配下の.htaccessに下記のように記述して

php_flag display_errors off
php_flag log_errors on
php_value error_log "./logs/php_error.log"


しかし、app/configのcore.phpの52行目あたりを
define('DEBUG', 0); // 0はプロダクションモード

に変更してみるとログにエラーが記録されない。

で、原因を調査してみると、cake/libs/configure.phpのConfigure::writeでerror_reporting(0)が実行されている為と分かった。

さすがに本番稼動でerror_reporting(0)はまずい。。。
もちろん、画面にエラーを表示させてはいけないが、ログに保存しておかないと障害が発生した場合の原因が特定しづらくなるからだ。

で、対応策を考えてみた

1.error_reporting(0)をerror_reporting(E_ALL)に書き換える。
2.app/webroot/index.phpの78行目の
require CORE_PATH . 'cake' . DS . 'bootstrap.php';

の下でerror_reporting(E_ALL)を実行させる。

1の場合、cakeフォルダ配下になるのでできれば直接書き換えたくない。
2の場合、いったんerror_reporting(0)が実行されてからE_ALLと実行しているので、エラーを拾いきれない場合がある。

で結局、1の直接書き換えるを採用することにした。
理由は、エラー出力レベルをあちこちで変えられたくないことと、
CakePHPをバージョンアップに伴い書き換えないといけないが、これは、app/webroot/index.phpでも同じことだからだ。
ラベル:cakephp PHP framework
posted by asaton at 17:16| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年03月24日

cakePHPのデバッグ方法(dBugを組み込む)

dBugの説明は下記ページ参照
PHP のデバッグが楽になる?変数の情報を見やすく表示する dBug

このライブラリをcakePHPへの組み込み方

1.venderディレクトリ(app/venders)にdBug/dBug.phpを配置する。

2.app/config/bootstrap.phpに下記コードを追加

vendor( 'dBug'.DS.'dBug' );


3.変数やオブジェクトを表示したい位置に下記コードを追加

new dBug(表示したい変数もしくはオブジェクト);


apiドキュメントは英語だし、ソース見るのもめんどくさいし(まぁ、最終手段として見なければいけないときもあるでしょうが・・・)

とりあえず、コントローラのオブジェクトに何があるのか表示させたり、モデルのアソシエーションをどうやってcakePHPが配列に格納しているのか調べたりするのに便利。

これだけで、デバッグがすごく楽になります。
posted by asaton at 21:42| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年03月22日

bake.php使ってみる(2)

appディレクトリが存在していて、app/config/database.phpが存在しない状態でbake.phpを実行し質問されることに答えていくとdatabase.phpを生成してくれる。

以下のような感じで聞かれる。

What database driver would you like to use? (mysql/mysqli/mssql/sqlite/postgres/
odbc)
[mysql] >


使用するDBドライバ選択。mysqlの場合そのままエンター。[]がデフォルトになる。

What is the hostname for the database server?
[localhost] >


DBサーバのホスト名。リモートDBを使用する以外ほとんどlocalhostのままでOKでしょう。

What is the database username?
[root] >


DBのユーザ名。とりあえずローカル環境なのでrootのまま。

What is the database password?
>


DBユーザのパスワード。とりあえず設定してないのでそのままエンター。

The password you supplied was empty. Use an empty password? (y/n)
[n] >


パスワードを空のままにすると、空のままでいいか再確認される。
yと入力。

What is the name of the database you will be using?
[cake] >


データベース名。

Enter a table prefix?
[n] >


プレフィックス。とりあえずエンター。

---------------------------------------------------------------
The following database configuration will be created:
---------------------------------------------------------------
Driver: mysql
Connection: mysql_connect
Host: localhost
User: root
Pass:
Database: cake
Table prefix:
---------------------------------------------------------------

Look okay? (y/n)
[y] >

上記の設定でOKならばそのままエンター

これで、app/config配下にdatabase.phpが作成される。

これまで、database.php.defaultから作成していた場合と比べて異なる点は、$defaultしか作成されないことぐらい。

xampp等ローカル環境で使用する場合、空パスワードでOKか聞かれるときにyと入力する以外、すべてエンターでいいので楽だ。

bake.phpはこの後もModel, Controller, Viewの作成へと進むが、とりあえず終わり方が分からないので、CTRL+Cで強制終了。
(qとかで抜けれるといいのに・・・)



ラベル:cakephp PHP framework
posted by asaton at 23:17| Comment(0) | TrackBack(2) | CakePHP | このブログの読者になる | 更新情報をチェックする

2007年03月16日

bake.phpを使ってみる。

ruby on railsのscript/generateみたいに、cakephpにもプロジェクトの自動生成機能としてbake.phpというものがある。

モデル、ビュー、コントローラだけではなく、appフォルダも生成してくれるみたいだ。

cakephpを展開したフォルダのappディレクトリを削除して、cake/scripts/bake.phpを起動、質問されることにすべてEnterで答えるとappディレクトリが生成された。

もともとあったappフォルダ内と比較してみると、
appフォルダ直下にapp_controller.phpとapp_model.phpがappフォルダ内に生成されている。
コントローラはAppControllerクラスからモデルはAppModelクラスから派生するので共通事項はこれらのファイルに記述すればいいみたいだ。

できれば、ruby on railsみたいにapp直下よりも、controllers、modelsフォルダに生成してくれればいいのだが・・・
posted by asaton at 18:00| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。