**[[質問箱4/505]] [#k5883782] #author("2018-03-11T20:48:31+09:00;2009-10-03T11:58:35+09:00","","") **[[質問箱/4505]] [#k5883782] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|default.ini.phpの読み込まれるタイミングについて| |~バージョン|1.4.7| |~投稿者|| |~状態|完了| |~投稿日|&new{2009-09-27 (日) 10:00:06};| ***質問 [#yc005f72] ちょっと基本的なことでご教示いただきたいことがあります。 PukiWikiのDATA_HOMEにあるdefault.ini.phpはどのタイミングで、どのような仕組みで読み込まれるのでしょうか? DATA_HOMEのディレクトリを下位ディレクトリも含めてgrep検索しましたが、include文やrequire文で読み込まれている場所を見つけることが出来ませんでした。 よろしくお願いします。 ***回答 [#c15d364f] - dev サイトのどこかに解説があったような気もするけど、まあいっか。複数Wiki を設置するために設定を変更したい([[質問箱3/456]] など)とか、入り口によって設定を切り替えたい([[続・質問箱/339]] など)とか、default or keitai に応じて設定を切り替えたい([[質問箱4/273]] など)という場合に、理解しておく必要がありますしね。 -- &new{2009-09-27 (日) 15:14:05}; - dev サイトのどこかに解説があったような気もするけど、まあいっか。複数Wiki を設置するために設定を変更したい([[質問箱/3456]] など)とか、入り口によって設定を切り替えたい([[質問箱/2339]] など)とか、default or keitai に応じて設定を切り替えたい([[質問箱/4273]] など)という場合に、理解しておく必要がありますしね。 -- &new{2009-09-27 (日) 15:14:05}; ++まず入り口(index.php)となるファイルが呼び出されます。そこから''LIB_DIR'' に設定されているディレクトリにあるpukiwiki.php が呼び出されます。 ++次に、呼び出されたpukiwiki.php から、''LIB_DIR'' にあるシステムファイル(func.php, file.php など)に該当するものが読み込まれます。(「// Include subroutines」とコメントが書かれている部分) ++システムファイルが読み込まれた後、初期設定をするために''LIB_DIR'' にあるinit.php を呼び出します。(「// Load *.ini.php files and init PukiWiki」とコメントが書かれている部分) +++init.php で初期設定をしていく過程で、''DATA_HOME'' に設定されているディレクトリにあるpukiwiki.ini.php を呼び出します。(「// Require INI_FILE」 ) +++ここまでで読み込まれた設定、''LANG'' と''UI_LANG'' を基に言語関連の設定と言語ファイル(ja.lng.php など)の呼び出しを行います。(「// INI_FILE: LANG に基づくエンコーディング設定」~「// LANG_FILE: Init severn days of the week」の辺り) +++$agents に登録されているルール(pukiwiki.ini.php の最後で設定されています)を使って、UserAgent を解析してどの''UA_PROFILE'' を呼び出すかを決定、''DATA_HOME'' にあるそのファイル(default.ini.php など)を呼び出します。(「// INI_FILE: $agents: UserAgentの識別」~「// Profile-related init and setting」の辺り) ++残りの初期設定が終わってpukiwiki.php に戻ってきたところで、必要に応じて残りのシステムファイル(例えば、メール送信が有効になっている場合は''LIB_DIR'' のmail.php が呼び出される、など)を呼び出します。(「// Load optional libraries」とコメントが書かれている部分) ++実行処理が開始されます。(例えば、閲覧時ならread プラグインが呼び出されます。「// Main 」とコメントが書かれている部分以降) -- 見つけられなかった理由は、 require(LIB_DIR . 'func.php'); みたいに単純なロジックではなく、''UA_PROFILE'' に応じて呼び出しファイルが変えられるように、 define('UA_INI_FILE', DATA_HOME . UA_PROFILE . '.ini.php'); と定義して、''UA_INI_FILE'' の値の位置にファイルが存在するかを確認した後で、 require(UA_INI_FILE); // Also manually 呼び出すように書かれているせいでしょう。 -- &new{2009-09-27 (日) 15:18:35}; - たいへん解りやすく有用な回答をありがとうございます。iii-aまでとiv以降は何とか解読出来るのですが、独学浅学の身ではiii-b,iii-cの部分が難解でどうしても理解できず、とても define('UA_INI_FILE', DATA_HOME . UA_PROFILE . '.ini.php'); など気がつきませんでした。このような端的でわかり易いガイドを頂いたので、もう一度じっくりこの部分を精読してみたいと思います。ありがとうございました。 -- &new{2009-09-27 (日) 20:12:44}; //#comment