CodeIgniter'daki $ _GET etkinleştirme

7 Cevap php

Ben CI $ _GET etkinleştirmek için nasıl anlamaya çalışıyorum.

Bu çerçeve kasten $ _GET dizi yok görünür ve o çekirdek sınıfları ile ciddi müdahalesi gerektirir etkinleştirme. bu ve nasıl üstesinden Herkes neden söyleyebiliriz?

aklınızda, ben URI ayrıştırma tutmak isteyen ve bunlar yol bağlıyorum, sadece basitçe kullanılabilir $ _GET de var.

7 Cevap

Uygulama kütüphaneler için aşağıdaki kütüphane ekleyin. Bu $ _GET dizisini temizleme varsayılan giriş kütüphanenin davranışını geçersiz kılar. URI segmentleri ve sorgu dizesi bir karışım sağlar.

application/libraries/MY_Input.php

class MY_Input extends CI_Input 
{
    function _sanitize_globals()
    {
        $this->allow_get_array = TRUE;
        parent::_sanitize_globals();
    }
}

Onun da bazı yapılandırma ayarlarını değiştirmek gerekli. Uri_protocol ayarı PATH_INFO'yu değişti ve gereken '?' karakter URI izin verilen karakter listesine eklenmesi gerekir.

application/config/config.php

$config['uri_protocol'] = "PATH_INFO";
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-?';

Bu sorgu dizesi içinde geçtiğini değerlerine erişmek mümkün olur.

$this->input->get('x');

POST veya $ this-> uri-> segment () kullanmak için komut dosyası mantığı değiştirmek için daha iyi, CI ile $ _GET asla kullanılmış, daha sonra aktif $ _GET params benim için

Mesajı Gönderen: CodeIgniter PHP Framework - Need to get query string

İşte JROX platformda gibi, CodeIgnitor yılında querystrings nasıl izin tam çalışan bir örnektir. Basitçe bulunan config.php bunu ekleyin:

/system/application/config/config.php 

Ve o zaman sadece aşağıdaki $ _GET veya sınıfını kullanarak normal gibi querystrings alabilirsiniz

$yo = $this->input->get('some_querystring', TRUE);
$yo = $_GET['some_querystring'];

İşte tüm iş yapmak için kod:

/*
|--------------------------------------------------------------------------
| Enable Full Query Strings (allow querstrings) USE ALL CODES BELOW
|--------------------------------------------------------------------------*/

/*
|----------------------------------------------------------------------
| URI PROTOCOL
|----------------------------------------------------------------------
|
| This item determines which server global should 
| be used to retrieve the URI string.  The default 
| setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of 
| the other delicious flavors:
|
| 'AUTO'              Default - auto detects
| 'PATH_INFO'         Uses the PATH_INFO
| 'QUERY_STRING'      Uses the QUERY_STRING
| 'REQUEST_URI'   Uses the REQUEST_URI
| 'ORIG_PATH_INFO'    Uses the ORIG_PATH_INFO
|
*/
if (empty($_SERVER['PATH_INFO'])) {
    $pathInfo = $_SERVER['REQUEST_URI'];
    $index = strpos($pathInfo, '?');
    if ($index !== false) {
        $pathInfo = substr($pathInfo, 0, $index);
    }
    $_SERVER['PATH_INFO'] = $pathInfo;
}

$config['uri_protocol'] = 'PATH_INFO'; // allow all characters 

$config['permitted_uri_chars'] = ''; // allow all characters 

$config['enable_query_strings'] = TRUE; // allow all characters 

parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);

:-) Enjoy

Kimden CodeIgniter's manual about security:

GET, POST, and COOKIE Data

GET data is simply disallowed by CodeIgniter since the system utilizes URI segments rather than traditional URL query strings (unless you have the query string option enabled in your config file). The global GET array is unset by the Input class during system initialization.

Bu okuyunuz forum entry for possible solutions (gets interesting from halfway down page 1).

Ben yorum için yeterli üne sahip, ama Phil Sturgeon's answer above Codeigniter Reactor sizin için kolay geçiş gitmek için yoludur yok.

Bu-> input-> my_input kılma ihtiyacı hatta config.php dosyasını değiştirmeden kalmadan () almak $ _GET veya $ kullanarak sorgu dizesi erişebilirsiniz.

Benim denetleyicisi bu tek satırı kullanarak başarı elde etti. Bu temelde herhangi bir özel CodeIgniter ayarlarına dayanarak olmadan isteği URL reparses:

parse_str(array_pop(explode('?',$_SERVER['REQUEST_URI'],2)),$_GET);

Sunucuda olmadan PATH_INFO (benimki gibi) bu deneyin:

parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET);

Sadece bu gibi koyabilirsiniz:

class Your_controller extends Controller {

function Your_controller()
{
    parent::Controller();

    date_default_timezone_set('Asia/Jakarta'); // set my timezone

    parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET);

}

function test()
{
    print_r($_GET); // here your $_GET vars
}

}