PHP Lietuviškai
direktorijos Options parametruose yra nustatyta MultiViews arba Options All. ( apache httpd.conf
http://httpd.apache.org/docs/content-negotiation.html ). Tada jei serveris neranda skriptas direktorijos,
bando ieškoti failo skriptas.* Musu atveju jis randa skriptas.php
Kaipgi gauti visus parametrus po skriptas.php? Galima pasinaudoti štai tokiais PHP kintamaisiai:
$PATH_INFO, $REQUEST_URI, $SCRIPT_NAME. Pažiurekime kaipgi veikia jie ir kaip mes visa tai realizuosime:
<?php
echo $PATH_INFO.”<br>”;
echo $REQUEST_URI.”<br>”;
echo $SCRIPT_NAME;
?>
Ši skripta savo web serveryje pavadiname url.php ir žiurime rezultatus. Ivedame paprasciausia varianta:
http://localhost/url.php/pirmas/pirmo_reiksme/antras/antro_reiksme (kurie bando ant savo darbiniu
kompiuteriu galite pasitestuoti ir MultiViews tada jus galite kreiptis i skripta
http://localhost/url/pirmas/pirmo_reiksme/antras/antro_reiksme) Rezultate browseryje matysime kad visi
kintamieji mums gražina tai ko mums ir reikia. Patogesnis variantas yra naudoti $PATH_INFO, kadangi prieš
tvarkantis su kintamaisiai nereikes iš gauto url’o striptinti(pašalinti) skripto vardo, musu atveju -> url.php
Dabar reikia padaryti taip kad mes galetume naudotis ir paciais kintamaisiai? Tai reiškia kad musu skriptuose
atsirastu kintamieji $pirmas ir $antras ir ju reikšmes butu analogiškos: $pirmas == ‘pirmo_reiksme’ &&
$antras == ‘antro_reiksme’;
Tam galime padaryti štai tokia funkcija:
<?php
function decode_url() {
global $PATH_INFO;
// Jei PATH_INFO – yra. Jei yra uzhsetinti parametrai
if(isset($PATH_INFO)) {
// Skaidom URL’a musu atveju pagal ‘/’
$duomenys = explode(‘/’, $PATH_INFO);
// Skaichiujam kiek paramtru ir ju reikshmiu atejo ish url’o
$num_param = count($duomenys);
if($num_param % 2 == 0) {
$duomenys[] = ”;
$num_param++;
}
// Padarom kad atsirastu kintamieji $pirmas bei $antras bei ju reiksmes
for( $i = 1; $i < $num_param; $i += 2) {
$GLOBALS[$duomenys[$i]] = $duomenys[$i+1];
}
}
}
?>
Štai šia funkcija idedam i koki nors header faila, bei includiname kiekviename skripte. Iš kart po jos
decodinam url’a paraše: decode_url();
Štai variantas kai turime tik viena skirybos ženkla ‘/’, o kaip padaryti su keliais? Pavyzdžiui
url.php/pirmas,pirmo_reiksme;antras,antro_reiksme ? Šiuo atveju $PATH_INFO ==
‘/pirmas,pirmo_reiksme;antras,antro_reiksme’;
Analogiškai darome funkcija:
<?
function decode_url()
{
// darom kad PATH_INFO prieinamas butu ir funkcijoje
global $PATH_INFO;
$duomenys = substr ($PATH_INFO , 1);
// skaidom url’a pagal pirma skirybos zhenkla ‘;’
$duomenys = explode(“;”,$duomenys);
// jei duomenu yra vikdysim toliau
if (isset($duomenys))
{
// zhiurim kiek yr tu variablu
$d_size = sizeof($duomenys);
for ($x=0;$x < $d_size; $x++)
{
// kiekviena gabaliuka skaidom pagal ‘,’
$vars = explode(“,”,$duomenys[$x]);
if (isset($vars)&&sizeof($vars)==2)
{
// jei tokio variablo skripte dar nera, mes ji sukuriame
isset($GLOBALS[$vars[0]])?true:$GLOBALS[$vars[0]] = $vars[1];
}
}
}
}
decode_url();
// Shtai ir viskas :)
?>
Manau dabar supratote kaip veikia štai šis url rewraitingo budas.
Apache alternatyva
Apache turi taip pat gera moduli: mod_rewrite. Panšu url rezultata galime gauti ir pasinaudojus apach’o
mod_rewrite moduliu. Štai jums mažas pavizdys:
.htaccess’e
RewriteEngine On
RewriteRule ^archyvas/([0-9]+)/([0-9]+)/([0-9])+ archyvas.php?data=$1-$2-$3
RewriteRule ^archivas$ index.php
Dabar jei kreipsimes i serveri štai tokiu url’: http://beta.php.lt/archyvas/2002/02/15 Servas perrašo url’a ir
kreipiasi štai taip: http://beta.php.lt/archyvas.php?data=2002-02-15
Idomus variantas? Tikriausiai pamate toki adresa patiketumete kad serveryje yra kiekvienos dienos atskira
direktorija :)
RewriteRule ^archivas$ index.php
Ši eilute redirektina vartotoja i index.php jei url’e nenurodyta pilna data.
Jei norite naudotis rewrite engin’u jums httpd.conf’e atkomentuoti štai šia eilute:
LoadModule rewrite_module libexec/mod_rewrite.so
// (win konfiguracijoje ji atrodo šiek tiek kitaip – skiriasi keliai)
O ar IIS varototojai taip gali? :) Deja ne.
p.s. pamastymui:
http://www.delfi.lt/news/daily/lithuania/article.php?id=716982
Kaip manote delfi savo serveryje turi daug daug daug direktoriju kiekvienai naujienu kategorijai ir
subkategorijai?
Informacijos šaltiniai ir copyraitai
Kaip jau minejau, dauguma informacijos paimta iš mistinio php_lt.zip, kurio net autoriaus nežinau. Jei jis
atsirastu, tepraneša apie tai man.
1 skyriaus informacija imta iš php_lt.zip bei iš Nikolajaus Krauklio straipsnio betoje.
2,3,4 skyriu informacija imta iš php_lt.zip
5 skyriaus informacija imta iš php_lt.zip bei iš Nikolajaus Krauklio straipsnio betoje.
6,7 skyriu informacija imta iš php_lt.zip bei šiek tiek nagu prikišta ir iš mano puses.
8 skyriaus informacija imta iš php_lt.zip bei iš Žygimanto Beržiuno straipsnio betoje.
9,10 skyriu informacija imta iš php_lt.zip
11,12,13,14 skyriu informacija imta iš Juliaus Praneviciaus straipsniu betoje.
15 skyriaus informacija imta iš betos. Autoriai Juozas Šalna bei Nikolajus Krauklys.
Visi emailai:
Nikolajus Krauklys – webmaster@php.lt
Juozas Šalna – salna@ktl.mii.lt
Julius Pranevicius – slamstas@email.lt
Žygimantas Beržiunas – webmaster@namukas.lt
Aš – scooox@delfi.lt
Geriausi PHP resursai:
http://beta.php.lt
http://php.tinklapis.lt
http://php.dar.lt
Skriptai
http://www.hotscripts.com
Ta proga noreciau pareklamuoti ir www.fenix.mes.lt.
Apie ten visoki gramatini šlamšta praneškite man.