[Codeigniter-users] バグでしょうか?

Back to archive index

tsujioka tsuji****@m-s*****
2008年 6月 4日 (水) 01:05:19 JST


kunitsujiです。

パッチの前に説明を。

http://localhost/index.php
この場合、デフォルトコントローラーが
welcome
で指定されている場合、
自動的に次のようになります。
http://localhost/index.php/welcome

で存在しないコントローラを指定した場合、404になります
http://localhost/index.php/hoge

application/controllers/hoge/top.php
というものが存在している場合、どうなりますか?
実際には、これは
http://localhost/index.php/welcome
これと同じものが開きます。。。。。
ディレクトリがある場合、index.php/hoge/
と入力すると、デフォルトコントローラーが呼ばれてしまいます。

Router.phpの216行目
    if ( ! 
file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
    {
     $this->directory = '';
     return array();
    }
array()をかえしてしまっているので、エラーとして処理されません。
先日のrsegmentsがおかしいのもここが影響していますね。
この場合
    if ( ! 
file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
    {
     $this->directory = '';
     show_404();
    }

とするのが正しいと思いますが、どうでしょう?
ディレクトリが存在して、その下にデフォルトコントローラーと同じ
welcomeコントローラーが存在すればOKですが、ない場合は404を返したほうがいいと思います。

パッチ
Index: system/libraries/Router.php
===================================================================
--- system/libraries/Router.php (revision 16)
+++ system/libraries/Router.php (working copy)
@@ -216,7 +216,7 @@
     if ( ! 
file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
     {
      $this->directory = '';
-     return array();
+     show_404();
     }

    }

いや、これが正しい動きならいいですが、バグだと思われるので検証していただければ。 

Kenjiさん、よろしくです。
もっとよくみたら、$this->directory = '';
もおかしですよね。。ディレクトリがあるのを認識しているのに’’にしている。
show_404()の上の$this->directory = '';も消してもいいかもしれません。

簡単な例として、inkTypeのadmin
で検証してもらえればすぐわかります。
inkType.jp/index.php/admin/
これだとTOPが開くはず。
controllers/にadminコントローラーがあるのであればそれが開くはずだし、ありません。
これはadmin/adminとしたら正常に動きます。
adminディレクトリにadminコントローラが見つかった場合ですね。

kunitsuji 




Codeigniter-users メーリングリストの案内
Back to archive index