Sabtu, 31 Maret 2012

Memanfaatkan $_SERVER['PATH_INFO'] sebagai pengganti $_GET

Buat yang sering berkoding programming atau scripting PHP, dikenal beberapa method masukan server yaitu POST dan GET. POST yaitu masukan dengan memanfaatkan proses upload/unggah, sedangkan GET adalah dengan proses download/unduh. Lho mengapa GET dapat dianggap sebagai masukan? Ya, yang dianggap sebagai masukan adalah karena proses GET dapat disertai dengan parameter di belakang URL yang akhirnya diterima oleh server sebagai sebuah masukan untuk diproses dianggap sebagai variabel tertentu.

Contoh : http://namaserver.com/?m=news&a=read&id=3
m, a dan id merupakan parameter yang value nya : news, read, dan 3 dapat diproses oleh server.


Jenis URL seperti itu memiliki banyak kekurangan antara lain pada : nilai sekuritas, search engine friendly, dan human friendly.

Secara umum biasanya pada sisi server, URL tersebut akan ditangani oleh sebuah program sisi server. Salah satunya adalah PHP. Berikut saya contohkan sebuah program penangkap GET sederhana dengan PHP




$modul   = $_GET[mod];

$mod_incl = "modules/" . $modul . "/index.php";

if( file_exists( $mod_incl ) ){
   include $mod_incl;
}



contoh url yang digunakan : http://namaserver/index.php?mod=home

contoh lain:


$id = $_GET[id];


contoh url yang digunakan : http://namaserver/berita.php?id=3


Sekarang, kita akan mencoba mengganti proses dengan GET tersebut dengan menggunakan PATH_INFO. Perbedaannya adalah, PATH_INFO ini menangkap path dengan struktur direktori. Misal http://namaserver/index.php/artikel/136/namaberita.html. Maka PATH_INFO nya adalah /artikel/136/namaberita.html. Dengan memanfaatkan fungsi PHP explode() yang bertujuan untuk memecah sebuah kata berdasar karakter tertentu (dalam hal ini /), maka PATH_INFO dapat diambil aray sebagai contoh berikut

$_SERVER['PATH_INFO'] nya adalah /artikel/136/namaberita.html.
jika kita bentuk sebuah variabel $r_pathinfo = explode("/",$_SERVER['PATH_INFO']); maka,
$r_pathinfo[0]=
$r_pathinfo[1]=artikel
$r_pathinfo[2]=136
$r_pathinfo[3]=namaberita.html



Berikut contoh penggunaan PATH_INFO dalam PHP



$pathinfo_url = $_SERVER['PATH_INFO'];
$r_path = explode( "/", $pathinfo_url );
$modul   = $r_path[1];
$mod_incl = "modules/" . $modul . "/index.php";
if( file_exists( $mod_incl ) ){
   include $mod_incl;
}

url yang akan digunakan adalah : http://namaserver/index.php/home

contoh lain:



$pathinfo_url = $_SERVER['PATH_INFO'];
$r_path = explode( "/", $pathinfo_url );
$id = $r_path[1];
//query


url yang akan digunakan seperti berikut : http://namaserver/berita.php/3

Dengan menggunakan PATH_INFO, dan beberapa kombinasi fungsi terutama untuk filtering dan sanitasi aplikasi, maka kekurangan-kekurangan yang terdapat pada penggunaan method $_GET pada url dapat dikurangi, meski sebenarnya dengan tetap menggunakan $_GET dan memanfaatkan fasilitas mod_rewrite dari web server, url friendly seperti ini tetap saja bisa dibentuk. Namun dengan path_info, jelas proses setting mod_rewrite melalui .htaccess dapat lebih mudah


Model path info ini juga digunakan dalam framework-framework PHP yang handal seperti CI (CodeIgniter), CakePHP dll

Salam

http://bimosaurus.com/2012/03/23/mengganti-path-model-get-dengan-path_info/

9 komentar:

  1. podho, toosss, mulane tak catet nang kene hahaha

    BalasHapus
  2. wkwkwkwk...hasemmmm. wis suwe ora dolanan ngono kuwi kok kaya bingung yah dadine....terakhir thn 2005-an kayane........hasyah kok wis 7 tahun yah....pantesan.

    BalasHapus
  3. aku dolanan ngene ya merga kepeksa kok :D nek ra kepeksa ya ra dadi hahahah

    BalasHapus
  4. sampeyan brati termasuk melu kerja paksa nek ngono kang

    BalasHapus
  5. memaksa diri sendiri... karang ya pengangguran yen ra nyambut gawe ra ono sing nggaji :(

    BalasHapus
  6. Wuih... njelimet.. Haha.. Ini cara passing value selain pake get yah om?? Kalo cuma passing value antar halaman PHP biar secure kan bisa pake hidden field om?? Gak kebaca via URL :D

    BalasHapus
  7. ya memang banyak teknik di PHP kok. Sebenarnya lebih enak lagi kalau kita mau mengefektifkan PHP Framework yang sudah dikembangkan.. seperti CakePHP, CI, Seagull, Kohana, DooPHP, Yii... dll
    Dengan framework itu segala macam aksi kita diberi standard, dan segala path itu tidak sesuai dengan hierarki yang sebenarnya.

    Cuma masalahnya: harus belajar lagi :D

    BalasHapus
  8. Hidden field di form itu maksudnya? Kalau itu yang dimaksud, memang ketika kita menggunakan POST, value dari field itu tidak akan terlihat di url. Tetapi di source code tetep ada kan.

    Maksud saya untuk proses clean url ini memang misal dalam satu situs, ada listing berita, itu kan tetep pake GET, kemudian belum lagi dengan search engine friendly..

    kalau di CodeIgniter keren urlnya
    http://namasitus/index.php/namaclass/namamethod/id.html

    index.php bisa diumpetin lagi pake mod_rewrite..

    BalasHapus