2ntブログ
2024 101234567891011121314151617181920212223242526272829302024 12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CodeIgniter徹底入門CodeIgniter徹底入門
(2008/06/10)
河合 勝彦鈴木 憲治

商品詳細を見る
便利なフレームワーク


最近、家でいじってみてます。
簡単、便利ですね、これ。

さて。
基本、POSTしか使えないようです。
GETも使いたいんですが、GET使える設定にすると・・・少し大変な事に。
config.phpで設定している「enable_query_strings」は、デフォルトFALSE。
これをTRUEにすれば、GET使えるんだけど・・・
これを見てる方たちなら、既にご存知かと思うので、そこは省略します。
ハッキリ言って、TRUEにする事は、オススメしません。


それでも、どうにかして、利用できるように出来ないかと思いまして。
どこで、GETがお亡くなりになってるのか、調べてみました。

どうやら、Inputクラスの、_sanitize_globalsというクラスが、GETを無かった事にしてるようです。

// Is $_GET data allowed? If not we'll set the $_GET to an empty array
if ($this->allow_get_array == FALSE)
{
     $_GET = array();
}
else
{
     $_GET = $this->_clean_input_data($_GET);
}


ちなみに、「allow_get_array」には、「enable_query_strings」の設定値が入っています。

あれ?これだけ?
そしたら、ここの処理を書き換えてしまえばいいのではないでしょうか?
ただ、もとのファイルを書き換えるのはナンセンスなので、継承します。


<?php

class MY_Input extends CI_Input {

    function MY_Input()
    {
        parent::CI_Input();
    }
   
    function _sanitize_globals()
    {
           // Would kind of be "wrong" to unset any of these GLOBALS
        $protected = array('_SERVER', '_GET', '_POST', '_FILES', '_REQUEST', '_SESSION', '_ENV', 'GLOBALS', 'HTTP_RAW_POST_DATA',
                            'system_folder', 'application_folder', 'BM', 'EXT', 'CFG', 'URI', 'RTR', 'OUT', 'IN');

        // Unset globals for security.
        // This is effectively the same as register_globals = off
        foreach (array($_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, (isset($_SESSION) && is_array($_SESSION)) ? $_SESSION : array()) as $global)
        {
            if ( ! is_array($global))
            {
                if ( ! in_array($global, $protected))
                {
                    unset($GLOBALS[$global]);
                }
            }
            else
            {
                foreach ($global as $key => $val)
                {
                    if ( ! in_array($key, $protected))
                    {
                        unset($GLOBALS[$key]);
                    }

                    if (is_array($val))
                    {
                        foreach($val as $k => $v)
                        {
                            if ( ! in_array($k, $protected))
                            {
                                unset($GLOBALS[$k]);
                            }
                        }
                    }
                }
            }
        }

        // Is $_GET data allowed? If not we'll set the $_GET to an empty array
        if ($this->allow_get_array == FALSE)
        {
            /**
             * ここをFALSEの場合でも、$_GETの値を取得できるようにすれば良さそう
             */
            //$_GET = array();
            echo 'これは、継承したクラスです';
            $_GET = $this->_clean_input_data($_GET);
        }
        else
        {
            $_GET = $this->_clean_input_data($_GET);
        }

        // Clean $_POST Data
        $_POST = $this->_clean_input_data($_POST);

        // Clean $_COOKIE Data
        // Also get rid of specially treated cookies that might be set by a server
        // or silly application, that are of no use to a CI application anyway
        // but that when present will trip our 'Disallowed Key Characters' alarm
        // http://www.ietf.org/rfc/rfc2109.txt
        // note that the key names below are single quoted strings, and are not PHP variables
        unset($_COOKIE['$Version']);
        unset($_COOKIE['$Path']);
        unset($_COOKIE['$Domain']);
        $_COOKIE = $this->_clean_input_data($_COOKIE);

        log_message('debug', "Global POST and COOKIE data sanitized");
    }
}

/* End of file welcome.php */


デバッグ入れてます。
条件分岐、いらねぇじゃんというツッコミは無しで。
これで、GETとPOSTの両方を使えるようにはなりました。

こんなんで、どうですかね?
もし使ってみて、変な箇所あれば、コメント頂けると幸いです。
ご参考までに。


コメント非表示