php 5.3.3

タイトルは自分の環境
CodeIgniter で作られたアプリケーションでバージョン5.3以下だと動いていたものが、自分の環境に入れてみたら動かなくてハマったのでメモ

問題

PHP5.3.3環境のアプリケーションURLを開こうとすると、エラー文が表示される

An Error Was Encountered

The URI you submitted has disallowed characters.

原因

  • CodeIgniter のURIクラスでのクォート処理が悪さしてるらしい
189             if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
190             {
191                 header('HTTP/1.1 400 Bad Request');
192                 show_error('The URI you submitted has disallowed characters.');
193             }

対策

preg_quote をハックして取り除く

189             if ( ! preg_match("|^[".($this->config->item('permitted_uri_chars'))."]+$|i", $str))
190             {
191                 header('HTTP/1.1 400 Bad Request');
192                 show_error('The URI you submitted has disallowed characters.');
193             }

ちなみに、正規表現にマッチさせる文字列は $this->config->item('permitted_uri_chars')

  • config/config.php
132 $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

URIに日本語を使いたい場合は、こうすればいいっぽい
今回は関係ないけど、一応メモ

132 $config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-';

で、やっと動いたと思ったらまたエラーでござる(:D)rz

問題

  • css のデザインが反映されない
  • リンクのURLがおかしい

原因

ソースを見てみると、ショートタグがそのまま載ってる

<?=base_url();?>

対策

ショートタグ機能が無効化に設定されてるので、有効にする

  • php.ini の場合
 229 #short_open_tag = Off
 230 short_open_tag = On
 13 php_flag short_open_tag on

今回は .htaccess で対応。動いた!クララが動いた!

PHP のバージョン 5.3以降で出やすいエラーっぽい。
後、ショートタグは5.3で非推奨になり、5.4から

<?=

が常に使えるように変更されてるみたい。
結局どっちやねーん