Thu, Jun 5, 2008
本日は「bootstrap.php」の解析ですが、このファイルはCakePHPのかなり重要な部分な感じがします。
ちょこっとずつ進めていきます。
まずは↓から。
require LIBS . 'configure.php';
$paths = Configure::getInstance();
cake/libs内のconfigure.phpを読み込んだ後、インスタンスを取得しています。getInstance()から、Singleton(シングルトン)であることが分かります。PHP4のシングルトンの解説は下記のサイトが分かりやすいです。
PHP4でデザインパターン(Singleton編)
また、&getInstance()メソッドの「&」や「&=」の意味は「てくめも@coop」さんのサイトに解説が載っています。
PHP4 と PHP5 の Sigleton Pattern
ソッド定義とメソッド呼び出しの両方に & を付けないと、参照でなくコピーになってしまい…
今日はあまり時間がないので、ここまでorz
次回はbootstrap.phpが「Configure」インスタンスで何をしているのか解析したいと思います。
Tue, May 20, 2008
今回は「/app/webroot/.htaccess」を解析します。
ソースは下記のとおり。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
RewriteCond
RewriteCondはURLをRewriteする条件になります。
「%{REQUEST_FILENAME}」は「要求したファイル名(フォルダ名)が」という意味。
URL指定で、「/app/webroot/aaa」ならば「aaa」がそれに当たります。
そして「!-d」は、この例であれば「aaa」というフォルダが存在するのであればRewriteしない。「!-f」はファイルが存在するのであればRewriteしないということになります。
この処理については、phaさんが自習室で詳しくまとめられています。
RewriteRuleをいろいろ試す会:RewriteCondを使う
QSAとは?
次にRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]ですが、
URL書き換え部分は(.*)が$1に書き換わります。
「/app/webroot/aaa」でアクセスしたら、「/app/webroot/index.php?url=aaa」となります。
後にくっついている[QSA,L]の「QSA」の意味ですが、とみぞーノートさんのサイトに詳しくまとめられています。
mod_rewrite – QSAフラグ
次回は「cake/bootstrap.php」を解説したいと思います。
Mon, May 12, 2008
前回は「app/webroot/index.php」から学習をスタートしましたが、じゃぁ「index.php」や「app/index.php」どうなっているのかと言いますと.htaccessによってシカトされてますね。おそらくmod_rewriteが使えない場合の対策なのでしょうが、その場合の処理まで解析していてはキリがありません。今日は最上層にある/.htaccessの解析をします。
/.htaccess(app/.htaccessもほぼ同じ内容)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
~
まずは、~ですが、これはmod_rewriteモジュールが有効かどうか調べて、有効であれば中身の処理を実行するという意味です。
RewriteEngine on以下
次に中身の解説ですが、こちらの技林さんのサイトの解説が凄く分かりやすいです。この処理でapp/webroot/に飛ばしているわけですね。
mod_rewrite
正規表現は欠かせません
また、mod_rewriteを知る上で正規表現の知識は欠かせません。自分の正規表現入門お薦めサイトはこちらのサイトです。
サルにもわかる正規表現入門
更に正規表現を理解したい人はやはり「フクロウ本」を読むことをお奨めします。
詳説 正規表現 第3版
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">
posted with <a href="http://www.amazlet.com/browse/ASIN/4873113598/studiokingdom-22/ref=nosim/" title="詳説 正規表現 第3版" target="_blank">amazlet</a> at 08.09.21
</div>
</div>
<div class="amazlet-detail">
Jeffrey E.F. Friedl <br />オライリージャパン <br />売り上げランキング: 32534
</div>
<div class="amazlet-review" style="margin-top:10px; margin-bottom:10px">
<div class="amazlet-review-average" style="margin-bottom:5px">
おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" />
</div>
<p>
<img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 正規表現を確実にマスターできる<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> DOSのコマンドのような簡単なものから</div>
<div class="amazlet-link" style="margin-top: 5px">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113598/studiokingdom-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a>
</div></div>
<div class="amazlet-footer" style="clear: left">
</div></div>
<h3>
[L]って何?
</h3>
<p>
これまた、技林さんのサイトの解説が分かりやすいです。
</p>
<p>
<a href="http://tech.bayashi.jp/archives/entry/techweb/2007/001981.html" target="_blank">mod_rewrite サンプル集</a>
</p>
<p>
[L]を指定している所でマッチしたら、それ以降のマッチング処理をしないということですね。
</p>
<h3>
(.*) app/webroot/$1だけで良くね?
</h3>
<p>
と思って、ローカル環境で^$ app/webroot/を外して試してみましたが普通に動きました。うーん、でもやっぱ何かしらの理由があるんだろうな…。誰か分かる方いらっしゃいましたら教えてください(><) 次のエントリーでは「app/webroot/.htaccess」を解説したいと思います。
</p>