http://www.backyrd.net/entry/20140518/1400388684 の続き。
さて、次はCodeIgniter。CodeIgniterは、PHP用の開発フレームワークで、特定のフォルダ構成にくみ上げられたファイル群が実体です。.NET Frameworkとかのように、システムや開発環境にプラグインやインストーラーを使って組み込むと言うタイプのものではないようですね。
ダウンロード
CodeIgniterは下記のリンクからダウンロードしてください。
- CodeIgniter のダウンロード
- http://codeigniter.jp/user_guide_ja/installation/downloads.html
どうやら、日本語言語パックなるものの最新版は2.0.3のようなのですが、CodeIgniter自体の最新版は2.1.4のようです。とりあえず2.1.4をダウンロードしてみました。
インストール?
ファイルをコピー
とりあえず、WebサーバーにCodeIgniterの一式を置いてみます。今回、Apacheの公開用フォルダは「C:\work\web」にしてあるので、ダウンロードしたCodeIgniterを展開して出来るファイル(index.phpとかapplicationフォルダとかがある階層一式)を、「c:\work\web」の下にコピーしました。
こんな感じ。
設定ファイルを変更
mod_rewriteの設定を調べていて、こんな情報を見つけました。
- stackoverflow/How to remove “index.php” in codeigniter's path
- http://stackoverflow.com/questions/1445385/how-to-remove-index-php-in-codeigniters-path
この回答のいくつかで、CodeIgniterの設定ファイルの「$config['index_page']」に関してこの設定もやっとけよ、と書かれています。
Also, make sure your index file is set to: $config['index_page'] = '';
とか、
Then find the following line in your application/config/config.php file $config['index_page'] = 'index.php'; Set the variable empty as below. $config['index_page'] = ''; That's it, it worked for me.
とかですね。設定ファイル(Version 2以降のCodeIgniterでは application/config/config.php)を見てみると……。
/* |-------------------------------------------------------------------------- | Index File |-------------------------------------------------------------------------- | | Typically this will be your index.php file, unless you've renamed it to | something else. If you are using mod_rewrite to remove the page set this | variable so that it is blank. | */ $config['index_page'] = 'index.php';
「mod_rewriteを使うのならば、ここで設定されているページ名を消して、ブランクにする。」と書かれています。今回、mod_rewriteを利用するので、index_pageの値は空文字にしておきましょう。
Welcomeページでエラーが出る
http://www.backyrd.net/entry/20140511/1399782368#section3 に書いたように、mod_rewriteを利用するよう設定してあるので、上記のCodeIgniter関連ファイルコピーで下記のURLからウェルカムページが表示されるはずです。
http://localhost/welcome
しかし……あれ?
Welcome to Codeigniter!の表示はあるのですが、上にエラーが出ています。
A PHP Error was encountered Severity: Warning Message: strpos(): Empty needle Filename: core/URI.php Line Number: 186
と、もう1つ、
A PHP Error was encountered Severity: Warning Message: strpos(): Empty needle Filename: core/URI.php Line Number: 190
これも検索してみましょう。検索キーワードは「"core/URI.php" Empty needle」。ヒットしたのはここ。
- イロ イッカイ ズツ…/ CodeIgniter 2.0.3 index.phpをURLから除去したときの警告(Empty delimiter)を消す
- http://www.ookawara.com/archives/820
なになに……Core/URI.php自体のバグ?なの? strpos関数で「SCRIPT_NAME」をURIから検索した際に、該当情報が無かったときのケアがされていない? というわけで、この人はURI.php自体を書き換えるという荒技に出たようです。
if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
この行から始まるif、elseifのブロックの外側で、下記のifによる事前検査を行います。
if (strlen($_SERVER['SCRIPT_NAME']))
strlenは指定された文字列の長さを求める関数。PHPでは、「false」も「ゼロ」も同じ扱いになるようなので、上記のif文は「SCRIPT_NAME文字列が長さ1以上の場合だけ実行」になります。よって、長さゼロのときはstrposとかによる位置検索と切り出しが行われない、ということでしょうか。やってみましょう。初めてのPHPプログラミングがCodeIgniterの修正とは……
訂正。http://localhost/welcome を再表示……
うぉ……初めてのPHPプログラミングはいきなりバグ発生で撃沈……。再度直します(笑)。if文の条件式末尾の括弧が抜けてました。反省。訂正、再表示。CodeIgniterのシステムファイルなどは、Webサーバーへのリクエストのたびに読み込まれるのでApacheの再起動とかは不要です。そのままブラウザをリロードすると……
よしゃ!成功。とりあえずここまでとしておきましょう。

- 作者: 河合勝彦,鈴木憲治,安藤建一
- 出版社/メーカー: 翔泳社
- 発売日: 2008/06/10
- メディア: 大型本
- 購入: 11人 クリック: 88回
- この商品を含むブログ (19件) を見る