toma-stkのCakePHP自習室

2008-01-25cake/configure.php - 初期化 (CakePHP解析 #5) このエントリーを含むブックマーク

前回の続きです。「cake/bootstrap.php」が「cake/configure.php」を読み込んでConfigureインスタンス(Singleton)を作っていますので、今日はこのConfigureインスタンスの動きをちょこっと解析。

bootstrap.phpから、&getInstanceメソッドが呼び出されていますね。このメソッドの中身は下記のとおり。

(※<?phpハイライトカラーを有効にするために記述しています)

<?php
function &getInstance() {
	static $instance = array();
	if (!$instance) {
		$instance[0] =& new Configure;
		$instance[0]->__loadBootstrap();
	}
	return $instance[0];
}
?>

PHP4のSingletonの挙動については、前回のエントリーで書いたので省略。ちょっと分からないのは、呼び出し元が次のようにしているところ。

<?php
$paths = Configure::getInstance();
?>

「::」はインスタンス化無しでstaticなメソッドを実行ということなんだろうけど、PHP4の場合は戻り値変数がstatic宣言されていれば、そのメソッドはstaticなメソッドでみなされるのかな?

うーん、よく分からん。次に進めちゃいます。


次は「__loadBootstrap()」ですが、これはConfigureクラスの一番下に定義されています。中身をみると自分で自分を初期化しているって感じかな。途中で「app/config/bootstrap.php」を読み込んでいますね。

この「app/config/bootstrap.php」ファイルはどうやら、作り手に対して「アプリケーション全体のグローバルな定数や関数を定義したり、または、それらが定義されているファイルを読み込みなよっ」て言っているんだと思います。

次回はConfigureクラスをもうちょっと突っ込んで解析してみたいと思います。

qjdjeophedqjdjeophed2013/07/26 07:16jspdstuvezsppn, <a href="http://www.ytoyjvkxqk.com/">vkpkdidjhk</a> , [url=http://www.lerzvwkvde.com/]iikdmemgqs[/url], http://www.tanuzceqoo.com/ vkpkdidjhk

rftokdguxcrftokdguxc2014/01/20 08:17rngewtuvezsppn, <a href="http://www.qpjhmlthou.com/">vlzogukklz</a>

wgkqwbzcitwgkqwbzcit2014/01/22 23:47mtpxktuvezsppn, <a href="http://www.ohmjtshgfb.com/">frtnameiem</a>

flzifyczckflzifyczck2014/01/26 02:12mnldttuvezsppn, http://www.vzqpmkirhr.com/ gsqssvepow

2008-01-24cake/bootstrap.php - Configureクラスとシングルトン (CakePHP解析 #4) このエントリーを含むブックマーク

本日は「bootstrap.php」の解析ですが、このファイルはCakePHPのかなり重要な部分な感じがします。

ちょこっとずつ進めていきます。

まずは↓から。

require LIBS . 'configure.php';
$paths = Configure::getInstance();

cake/libs内のconfigure.phpを読み込んだ後、インスタンスを取得しています。getInstance()から、Singleton(シングルトン)であることが分かります。PHP4のシングルトンの解説は下記のサイトが分かりやすいです。

http://www.doyouphp.jp/sample/sample_class_dp_singleton.shtml


また、&getInstance()メソッドの「&」や「&=」の意味は「てくめも@coop」さんのサイトに解説が載っています。

http://www.ecoop.net/memo/2007-10-22-1.html

ソッド定義とメソッド呼び出しの両方に & を付けないと、参照でなくコピーになってしまい…

今日はあまり時間がないので、ここまでorz

次回はbootstrap.phpが「Configure」インスタンスで何をしているのか解析したいと思います。

2008-01-21/app/webroot/.htaccess(CakePHP解析 #3) このエントリーを含むブックマーク

本日は「/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さんが自習室で詳しくまとめられています。

http://studyroom.g.hatena.ne.jp/pha/20070511/p1


QSAとは?

次にRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]ですが、

URL書き換え部分は(.*)が$1に書き換わります。

「/app/webroot/aaa」でアクセスしたら、「/app/webroot/index.php?url=aaa」となります。

後にくっついている[QSA,L]の「QSA」の意味ですが、とみぞーノートさんのサイトに詳しくまとめられています。

http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%20-%20QSA%A5%D5%A5%E9%A5%B0



次のエントリーでは「cake/bootstrap.php」を解説したいと思います。

OsmanOsman2012/08/19 10:17Now I know who the brinay one is, I'll keep looking for your posts.

fhxszsddnhfhxszsddnh2012/08/19 20:254clhI7 <a href="http://pkzssbdpvtql.com/">pkzssbdpvtql</a>

yazhedfyazhedf2012/08/21 19:42ggn9xi <a href="http://dwnckwocaqww.com/">dwnckwocaqww</a>

2008-01-19/.htaccess(CakePHP解析 #2) このエントリーを含むブックマーク

前回は「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>


<IfModule mod_rewrite.c>~</IfModule>

まずは、<IfModule mod_rewrite.c>~</IfModule>ですが、これはmod_rewriteモジュールが有効かどうか調べて、有効であれば中身の処理を実行するという意味です。


RewriteEngine on以下

次に中身の解説ですが、こちらの技林さんのサイトの解説が凄く分かりやすいです。この処理でapp/webroot/に飛ばしているわけですね。

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html


正規表現は欠かせません

また、mod_rewriteを知る上で正規表現の知識は欠かせません。自分の正規表現入門お薦めサイトはこちらのサイトです。

http://www.mnet.ne.jp/~nakama/

更に正規表現を理解したい人はやはり「フクロウ本」を読むことをお奨めします。

詳説 正規表現 第2版

詳説 正規表現 第2版


[L]って何?

これまた、技林さんのサイトの解説が分かりやすいです。

http://tech.bayashi.jp/archives/entry/techweb/2007/001981.html

1つ目でマッチしたら、それ以降は実行しないということですね。


(.*) app/webroot/$1だけで良くね?

と思って、ローカル環境で^$ app/webroot/を外して試してみましたが普通に動きました。うーん、でもやっぱ何かしらの理由があるんだろうな…。誰か分かる方いらっしゃいましたら教えてください(><)


次のエントリーでは「app/webroot/.htaccess」を解説したいと思います。

2008-01-17app/webroot/index.php(CakePHP解析 #1) このエントリーを含むブックマーク

今日から、はてな自習室を使ってCakePHPを解析しつつPHPCakePHPを勉強していきたいと思います。

よろしくお願いします。m(_ _)m

まずは「app/webroot/index.php」からですが、ここで肝になるのは『include_path』ではないでしょうか。

<?php
if (!defined('CORE_PATH')) {
	if (function_exists('ini_set')) {
		ini_set('include_path',
 CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS .
 APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'));
		define('APP_PATH', null);
		define('CORE_PATH', null);
	} else {
		define('APP_PATH', ROOT . DS . APP_DIR . DS);
		define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
	}
}
?>

で、include_pathってなんぞや?ってなるわけですが、こちらのデジットさんの説明がとっても分かりやすいです。

http://digit-01.com/ownpage/php_include_path.html

ここが重要ですね。探す順番。

PHP実行ファイルからrequire()、include()等で読み出されるファイルは、次の順番で探されます。

1. include_pathで設定されているディレクトリ

2. 実行しているファイルのあるディレクトリ

3. ./ 又は ../ で始まっている場合は、 実行しているファイルのあるディレクトリからの相対パス

更に、require()、include()されたファイル(例えば「inc.php」)の中にrequire()、include()がある場合は、当然上記のディレクトリを探した後に「inc.php」ファイルがあるディレクトリも探します。

自分の環境で「var_dump(ini_get('include_path'));」としてみたところ次のように出力されました。

string(57) "C:\www\schedule;C:\www\schedule\app\;.;C:\xampp\php\pear\"

CakePHPのフォルダを配置した場所が「C:\www\schedule」なので、CakePHPのルートに当たるディレクトリとその下層の「app」フォルダがinclude_pathに追加されたようです。ちなみに「.;C:\xampp\php\pear\」はphp.iniファイルに設定されていました。

このinclude_pathの設定により、requireやincludeでいちいち相対パスを指定する必要が無くなるわけですね。include_pathの概念がよく分かってなかったので早速勉強になりました。

IliasIlias2012/08/18 18:54My hat is off to your astute cmmoand over this topic-bravo!

sxrwtrdfxjysxrwtrdfxjy2012/08/19 07:48H9vMW2 <a href="http://kjpsoprdybvt.com/">kjpsoprdybvt</a>

ogqrmwouioogqrmwouio2012/08/20 06:09JHixxc , [url=http://pihhhtgutjsz.com/]pihhhtgutjsz[/url], [link=http://kujnvfsfrqri.com/]kujnvfsfrqri[/link], http://gtgfhvuxnasp.com/

AdulToySexComAdulToySexCom2018/01/12 00:56Best Adult Toys and Sex Toys for your Healthy Life! Sex Toys, Dildos, Vibrators, Sex Dolls, and Many More

When you want to shop erotic toys, AdulToySex.com has it all. Whether male or female, straight or gay, and anywhere in between, we have the adult toys and movies you’re looking for.

We also provided FREE SHIPPING WORLDWIDE without minimum orders!

http://www.AdulToySex.com/