online: 1; azi: 543; total: 52549 Webdesign - Phpmysql - 06

Variabile de mediu si erori

  • In aceasta lectie invatati sa obtineti accesul la valorile variabilelor de mediu.
  • Invatati despre depanarea si tratarea erorilor.

1. Obtinerea si utilizarea datelor de la o variabila de mediu

Variabilele de mediu sunt folosite pentru stocarea optiunilor si a parametrilor care personalizeaza mediul de aplicatie. Aplicatiile pot obtine accesul la valorile variabilelor de mediu si in functie de acestea îsi pot ajusta comportamentul.
De exemplu, calea de cautare a programelor MS-DOS este stocata într-o variabila de mediu denumita PATH. In general, comenzile sistemelor de operare sunt folosite pentru a configura variabilele de mediu si pentru a stabili valorile acestora. Cu toate acestea, unele aplicatii manipuleaza valorile variabilelor de mediu.
Atât serverul Web Apache, cât si serverul de aplicatie PHP folosesc variabile de mediu pentru a prezenta informatii de stare. Unele dintre cele mai importante variabile de mediu folosite de Apache si PHP sunt rezumate în tabelul de mai jos. Numeroase servere Web, altele decât Apache, furnizeaza o parte din aceste variabile de mediu sau chiar pe toate.
Multe dintre aceste variabile reflecta caracteristicile cererii HTTP care a solicitat executia PHP. Puteti vizualiza toate variabilele de mediu disponibile pentru programele PHP prin invocarea functiei phpinfo() si vizualizarea datelor de iesire generate de aceasta.
Vizualizarea datelor unei variabile de mediu se poate face folosind variabila $_SERVER si o cheie (intre paranteze patrate) ce repreinta numele variabilei de mediu.

  • De exemplu, pt. afisarea domeniului serverului unde ruleaza scriptul
              echo $_SERVER['SERVER_NAME'];

Variabila de mediu Descriere
CONTENT_LENGTH - Lungimea, în octeti, a corpului cererii.
CONTENT_TYPE - Tipul MIME al datelor din corpul cererii.
DOCUMENT_ROOT - Calea care constituie radacina arborelui catalogului cu documente al serverului Web.
GATEWAY_INTERFACE - Returneaza ersiunea protocolului CGI (Common Gateway Interface) folosit de serverul Web.
HTTP_ACCEPT - Continutul antetului HTTP Accept.
HTTP_ACCEPT_CHARSET - Continutul antetului HTTP Accept-Charset:, care specifica seturile de caractere întelese de client.
HTTP_ACCEPT_ENCODING - Continutul antetului HTTP Accept-Encoding:, care specifica tipurile de continuturi întelese de client.
HTTP_ACCEPT_LANGUAGE - Continutul antetului HTTP Accept-Language:, care specifica limbajele preferate de client.
HTTP_CONNECTION - Continutul antetului HTTP Connection:, care indica optiunile solicitate de client.
HTTP_HOST - Continutul antetului HTTP Host:, care indica numele de gazda, folosit de client la prezentarea cererii.
HTTP_REFERER - Adresa URL a paginii Web care a trimis clientul la pagina curenta.
HTTP_USER_AGENT - Continutul antetului HTTP user-Agent, care indica tipul si versiunea browser-ului folosit.
PATH - Calea de executie asociata cu mediul serverului.
QUERY_STRING - Sirul de interogare, daca exista, prin care a fost accesata pagina.
REMOTE_ADDR - Adresa IP a clientului (vizitatorului).
REMOTE_HOST - Numele de gazda al clientului.
REMOTE_PORT - Adresa portului clientului de unde a pornit cererea.
REQUEST_METHOD - Metoda de cerere HTTP folosita; de exemplu, GET, POST, PUT sau HEAD.
REQUEST_URI - URI folosit pentru accesul la pagina curenta. URI este alcatuit dintr-un URL si un sir optional de interogare.
SCRIPT_FILENAME - Numele de cale absolut al scriptului curent.
SCRIPT_NAME - Adresa URL a scriptului curent.
SERVER_ADMIN - Adresa de e-mail a administratorului serverului Web.
SERVER_HOST - Numele de gazda asociat serverului Web care prelucreaza cererea.
SERVER_PORT - Portul folosit de serverul Web pentru comunicatii.
SERVER_PROTOCOL - Numele si versiunea protocolului prin intermediul caruia s-a executat cererea.
SERVER_SIGNATURE - Sirul care identifica versiunea serverului Web si numele de gazda folosit pentru prelucrarea cererii.
SERVER_SOFTWARE - Sirul care identifica programul server Web si versiunea acestuia.

- O lista completa a acestor variabile de mediu o gasiti la pagina oficiala $_SERVER

Puteti obtine accesul la variabila de mediu folosind variabila $_SERVER care este de fapt un Array in care cheile elementelor sunt numele variabilelor de mediu
De exemplu, urmatoarea instructiune echo trimite browserului adresa IP a clientului (vizitatorului):

<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo "Adresa dv. IP este $ip";
?>

Afisarea sau nu a acestor variabile globale depinde de permisiunile facute la configurarea serverului PHP si de datele transmise.

2. Depanarea unui script

Uneori, în locul datelor de iesire ale scriptului dumneavoastra, puteti vedea unul din urmatoarele:

  • Textul scriptului, în loc de datele de iesire ale acestuia
  • O caseta de dialog, prin care sunteti întrebat daca doriti sa descarcati fisierul care contine scriptul
  • Un mesaj în care se spune ca scriptul nu exista
  • Un mesaj în care se spune ca browserul dumneavoastra Web nu are permisiunea de a obtine accesul la script
  • Un mesaj în care se spune ca scriptul dumneavoastra contine o eroare

La vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar daca scriptul în sine este corect.
- Daca vedeti textul scriptului dumneavoastra sau o caseta de dialog prin care sunteti întrebat daca doriti sa descarcati fisierul care contine scriptul, este posibil ca extensia fisierului script sa fie incorecta sau ca serverul PHP sa nu functioneze. Desi fisierele script PHP trebuie sa aiba, în general, extensia .php, este posibil (dar mai rar) ca un administrator de sistem sa configureze un server PHP astfel încât acesta sa impuna o alta extensie de fisier. Astfel, daca scriptul dumneavoastra esueaza din unul dintre aceste doua motive, luati legatura cu administratorul dumneavoastra de sistem.
- Daca vedeti un mesaj în care se spune ca scriptul nu exista, este posibil ca dumneavoastra sa fi tastat incorect adresa URL. Verificati daca ati tastat corect adresa URL identificata de administratorul dumneavoastra de sistem, precum si daca ati atasat corect la aceasta numele fisierului care contine scriptul, folosind un slash numai daca adresa URL identificata de administratorul dumneavoastra de sistem nu se încheie cu acest caracter.
- Daca vedeti un mesaj în care se arata ca browserul dumneavoastra Web nu are permisiunea de a obtine accesul la script, poate ca este necesar sa modificati permisiunile fisierului script. Pentru a afla cum trebuie procedat, consultati-va cu administratorul de sistem.
- Daca vedeti un mesaj în care se spune ca scriptul dumneavoastra contine o eroare, verificati daca nu a aparut vreuna din urmatoarele probleme:

  • O eroare de tastare, cum ar fi scrierea gresita a cuvântului echo
  • O eroare de punctuatie, cum ar fi paranteze, ghilimele sau punct si virgula, lipsa sau inserate gresit
  • Neincluderea sau includerea eronata a liniilor de delimitare a scriptului, în speta <?php si ?>
  • Un marcaj de comentariu ( / / ) care lipseste sau care a fost introdus gresit
De exemplu, iata un script care contine un tip de eroare frecvent întâlnit. Puteti identifica eroarea?
<?php
// Acest script contine o eroare de sintaxa
echo "Salut, World Wide Web!;
?>

Din script lipseste caracterul ghilimele duble de închidere, care trebuie sa delimiteze expresia de tip text. Daca încercati sa executati acest script, puteti vedea doar o pagina goala sau o eroare similara celei prezentate în continuare.

Parse error. Parse error in /home/bmccarty/public_html/php/module-01/syntax-error.php On line 7

Mesajul de eroare încearca sa va indice sursa erorii, indicând numarul liniei la care s-a produs eroarea. Totusi, remarcati ca mesajul va îndruma spre linia 7 a unui script care contine numai 4 linii. Din moment ce ghilimelele duble de închidere lipsesc, serverul PHP cauta dincolo de sfârsitul scriptului pentru a gasi ghilimelele duble respective. Ca atare, serverul PHP este oarecum derutat cu privire la sursa erorii.
Morala este aceea ca nu puteti conta în totalitate pe serverul PHP pentru a determina locatia erorii; folositi numarul de linie furnizat de server numai ca îndrumar pentru a depista locatia probabila a erorii.

3. Tratarea erorilor

Modulul PHP poate fi configurat astfel incat sa afiseze erorile intilnite in codul PHP. Acest lucru poate fi foarte util in cazul depanarii programelor. Pentru a activa afisarea erorilor exista doua metode:

  • - modificarea parametrului display_errors din fisierul de configurare "php.ini"
  • - folosirea functiei ini_set(‘display_errors’);
In cazul primei metode trebuie sa avem drepturi de administrator pentru a modifica fisierul php.ini. Nu se recomanda setarea parametrului display_errors la valoarea 1(TRUE) in cazul site-urilor de productie; mesajele de eroare afisate nu sint folositoare utilizatorului. Pe de alta parte aceasta ar contribui la marirea riscului unui atac.
A doua metoda consta in folositrea functiei ini_set, care permite unui script sa redefineasca temporar un parametru din fisierul de configurare php.ini.
Consideram un exemplu de cod in care intentionat incercam sa citim variabile care nu exista:
<?php
ini_set('display_errors',1);
echo "Valoarea transmisa este ".$var;
?>

In exemplul de mai sus daca variabila cu nume: "var" nu exista PHP va afisa un mesaj de eroare de genul:

Notice: Undefined variable: var

Putem determina tipurile de erori pe care le semnaleaza PHP folosind functia: error_reporting(). Aceasta preia o constanta care specifica nivelul la care se afiseaza erorile.

  • error_reporting(E_ALL) - semnaleaza toate tipurile de erori
  • error_reporting(E_ALL & ~E_NOTICE) - semnaleaza toate erorile in afara de anunturi
  • error_reporting(0) - dezactiveaza acesta caracteristica.
Exemplu:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);

echo "Valoarea transmisa este ".$_GET['orase'];
?>
- Testati acest exemplu pentru a vedea rezultatul.