Patariu.lt   Studijos   N-18   Sapnininkas   Receptai

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.

Puslapiai: 1 2 3 4 5 6 7 8 9 10 11 12

Share on Facebook

Hey.lt - Nemokamas lankytoj� skaitliukas