Învăţăm PHP: Despre $_SERVER


Facem puţin un salt înainte. Dacă aveţi ceva experienţă cu scrierea de pagini web veţi înţelege următoarele. Dacă nu, încercaţi să citiţi şi eventual, dacă nu vă spune prea multe, lăsaţi deoparte acest articol. Pentru unii s-ar putea să aibă sens abia mai încolo. Dar aş vrea ca acum să continui cazurile foarte particulare de variabile predefinite. Am văzut $_GET şi $_POST, atât de utile în programare. Foarte utile sunt şi variabilele furnizate de $_SERVER. După cum intuiţi din nume, oferă informaţii despre server.

Ca de obicei ne servim de un cod. Îl puteţi vedea în acţiune dând click aici. Am apelat pagina cu un parametru doar de dragul ca QUERY_STRING să semnaleze ceva, chiar dacă în sine codul nu justifică. Citiţi deci pagina cu rezultatele şi lucrurile mai-mai că s-ar explica singure. Dacă e nevoie reveniţi la articol căci vom încerca să le explicăm pe scurt. Important: mai jos nu sunt toate variabilele accesibile cu $_SERVER, ci doar cele pe care, subiectiv, le-am considerat mai utile în webaplicaţii.

[PHP]echo ‘PHP_SELF: ‘.$_SERVER[‘PHP_SELF’].’
‘;
echo ‘SERVER_ADDR: ‘.$_SERVER[‘SERVER_ADDR’].’
‘;
echo ‘SERVER_NAME: ‘.$_SERVER[‘SERVER_NAME’].’
‘;
echo ‘SERVER_SOFTWARE: ‘.$_SERVER[‘SERVER_SOFTWARE’].’
‘;
echo ‘REMOTE_ADDR: ‘.$_SERVER[‘REMOTE_ADDR’].’
‘;
echo ‘SCRIPT_FILENAME: ‘.$_SERVER[‘SCRIPT_FILENAME’].’
‘;
echo ‘SCRIPT_NAME: ‘.$_SERVER[‘SCRIPT_NAME’].’
‘;
echo ‘QUERY_STRING: ‘.$_SERVER[‘QUERY_STRING’].’
‘;
echo ‘REQUEST_URI: ‘.$_SERVER[‘REQUEST_URI’].’
‘;
echo ‘HTTP_REFERER: ‘.$_SERVER[‘HTTP_REFERER’].’
‘;
echo ‘HTTP_USER_AGENT: ‘.$_SERVER[‘HTTP_USER_AGENT’].’
‘;[/PHP]

Să începem deci:

PHP_SELF: Este util pentru a şti… unde eşti :) . Ştiu, sună absurd, dar la un moment dat poţi să scrii un script independent de pagină. Un script care să fie valabil că eşti în pagina tralalala.php sau birlibau.php. Pentru a scrie codul general nu vei folosi numele paginii ci PHP_SELF. Dacă la un moment dat schimbi numele paginii scriptul va merge în continuare.

SERVER_ADDR: Este vorba chiar de adresa serverului unde rulează scriptul. Poate fi util celor care lucrează local un proiect şi vor să îl verifice şi online apoi. În diverse situaţii vor putea verifica dacă SERVER_ADDR este 127.0.0.1 înseamnă că rulez scriptul local (caz în care, de exemplu, sar peste trimiterea de emailuri); dacă e altă valoare înseamnă că serverul rulează online.

SERVER_NAME: Cam aceeaşi utilitate, dar în locul unor cifre seci e un text. Este util şi în combinaţii gen http://+SERVER_NAME+REQUEST_URI – dă exact adresa din bara de adrese a navigatorului.

SERVER_SOFTWARE: Informaţie pentru cei foarte curioşi. Utilitate practică… nu foarte mare.

REMOTE_ADDR: Foaaarte util. Eu folosesc des pentru a bloca accesul nedorit la siturile la care lucrez şi vreau să îmi rămâne accesibile doar mie şi colaboratorilor. Restul: afară! Detalii exacte în Ţine ascuns situl în lucru.

SCRIPT_FILENAME: Arată calea absolută a scriptului. Nu foarte utilă pentru afişat (de fapt nici nu e bine să afişaţi), ci pentru a cunoaşte structura directoarelor.

SCRIPT_NAME?QUERY_STRING=REQUEST_URI Fiecare în parte poate fi util în programare. Dacă nu vedeţi utilitatea… aşteptaţi să scrieţi coduri mai complexe.

HTTP_REFERER: Cum am ajuns în pagina aceasta? Ne spune această variabilă predefinită. Utilă inclusiv dacă vreţi să faceţi un counter sau să analizaţi statistic de unde vin cei mai mulţi vizitatori pe sit. Dacă vin de pe Google puteţi să îi salutaţi specific.

HTTP_USER_AGENT: Nu e bine, dar poate uneori aveţi de făcut acţiuni diferite în funcţie de navigatorul folosit de… navigator (internaut). Astfel, dacă foloseşte IE 6 îl puteţi urechia 😉 . Poate aveţi un script care merge doar sub Firefox: puteţi identifica ce utilizatori au încărcat pagina cu un alt navigator şi scrie un mesaj de „ne pare rău, nu merge decât sub Firefox”.

Cam atât despre $_SERVER.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 5,00 din 5)
Loading...Loading...

1 comentariu

  1. accesinterzis spune:

    Vreau sa fac o mica mentiune.

    Atunci cand folosim unele elemente din tabloul superglobal $_SERVER ca PHP_SELF, HTTP_USER_AGENT si HTTP_REFERER trebuie sa ne asiguram ca nu contin cod (Javascript) malitios. Asadar trebuie sa le infasuram in strip_tags si htmlentities NEAPARAT inainte de a le folosi in cod.


    //-----infasor in strip_tags() si htmlentities() URL-urile obtinute dinamic, http_user_agent-ul si cookie-urile ca sa ma asigur ca nu contin cod malitios
    $php_self = htmlentities(strip_tags($_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8');
    $referer = (isset($_SERVER['HTTP_REFERER'])) ? htmlentities(strip_tags($_SERVER['HTTP_REFERER']), ENT_QUOTES, 'utf-8') : NULL;
    $browser_os = htmlentities(strip_tags($_SERVER['HTTP_USER_AGENT']), ENT_QUOTES, 'utf-8');
    $cookie = (isset($_COOKIE)) ? filter_this($_COOKIE, array('strip_tags', 'htmlentities')) : NULL;

    Acum ca tot am inceput sa discut despre validarea datelor obtinute din tablourile superglobale vreau sa mai spun ca atunci cand lucram cu tabloul $_COOKIE trebuie intotdeauna sa filtram ABSOLUT TOATE datele din array-ul $_COOKIE deoarece valorile stocate de cookie-urile create pe PC-ul vizitatorului pot fi manipulate si folosite malitios.

    function filter_this($unfiltered_data, $filters) {
    if (is_array($unfiltered_data)) {
    $wrapped_data = array();

    foreach ($unfiltered_data as $k => $v) {
    foreach ($filters as $filter) {
    switch ($filter) {
    case 'htmlentities':
    $v = htmlentities($v, ENT_QUOTES, 'utf-8');
    break;

    default:
    $v = $filter($v);
    }
    }

    $wrapped_data[$k] = $v;
    }
    } else {
    foreach ($filters as $filter) {
    switch ($filter) {
    case 'htmlentities':
    $unfiltered_data = htmlentities($unfiltered_data, ENT_QUOTES, 'utf-8');
    break;

    default:
    $unfiltered_data = $filter($unfiltered_data);
    }
    }

    $wrapped_data = $unfiltered_data;
    }

    return ($wrapped_data);
    }


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *