E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

XII. "Enervand" virusii (partea a II-a)

03.11.2008
XII.

PHP iti permite sa folosesti sistemul sau incorporat cu ajutorul caruia poti genera propriile erori.

Total vizualizari: 3912 3912 afisari   |   Comentarii  0   |   Rating   |   (1 vot)   |   Timp necesar: 25 min 25 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  Devzone.zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1 2 »
comenteaza printeaza

Apăsând tragaciul

Până acum am vorbit despre felul în care corectăm erorile generate de PHP, dar de ce să ne oprim aici? PHP vă permite să utilizaţi sistemul sau încorporat de tratare a erorilor pentru a vă crea propriile erori personalizate.

Acest lucru este realizat printr-o funcţie numită trigger_error (), care vă permite să obţineţi oricare din cele trei tipuri de eroare rezervate utilizatorilor: E_USER_NOTICE, E_USER_WARNING şi E_USER_ERROR. Când aceste erori sunt generate, sistemul de corectare inclus în PHP se va declanşa automat pentru a se ocupa de acestea.

<?php 
 
// functie pentru testarea unui numar 
// genereaza E_USER_WARNING daca numarul este de tip float 
// genereaza E_USER_ERROR daca numarul este negativ 
function testNumber($num) { 
    // float 
    // declanseaza un avertisment 
    if (is_float($num)) { 
        trigger_error("Numarul $num nu este intreg", E_USER_WARNING); 
    } 
 
    // negativ 
    // declanseaza o eroare fatala 
    if ($num < 0) { 
        trigger_error("Numarul $num este negativ", E_USER_ERROR); 
    } 
} 
 
// testeaza functia cu valori diferite 
testNumber(100); 
testNumber(5.6); 
testNumber(-8); 
 
?>

Dacă doriţi să aveţi un sistem personalizat de corectare a erorilor care să se ocupe de propriile dvs. erori ... ei bine, sunteţi greu de mulţumit, nu-i asa? Aruncaţi o privire la următorul exemplu, care rescrie scriptul precedent pentru a utiliza un sistem de manipulare a erorilor definit de utilizator:

 
<?php 
 
// functie pentru testarea unui numar 
// genereaza E_USER_WARNING daca numarul este de tip float 
// genereaza E_USER_ERROR daca numarul este negativ
function testNumber($num) { 
    // float 
    // declanseaza un avertisment 
    if (is_float($num)) { 
        trigger_error("Numarul $num nu este intreg", E_USER_WARNING); 
    } 
 
    // negativ 
    // declanseaza o eroare fatala 
    if ($num < 0) { 
        trigger_error("Numarul $num este negativ", E_USER_ERROR); 
    } 
} 
 
// handler de erori personalizat 
function myErrorHandler($type, $msg, $file, $line, $context) { 
    switch ($type) { 
 
        // avertismente 
        case E_USER_WARNING: 
            // raportare eroare 
            print "Eroare care nu este fatala la linia $line din $file: $msg <br />"; 
            break; 
 
        // fatale 
        case E_USER_ERROR: 
            // raporteaza eroare si apeleaza die() 
            die("Eroare fatala la linia $line din $file: $msg <br />"); 
            break; 
 
        // notificari 
        default: 
            // nu face nimic 
            break; 
    } 
} 
 
// setati numele handler-ului personalizat 
set_error_handler("myErrorHandler"); 
 
// testeaza functia cu valori diferite  
testNumber(100); 
testNumber(5.6); 
testNumber(-8); 
 
?>

Reţineţi că este responsabilitatea handler-ului personalizat de a apela die() în cazul erorilor fatale generate de utilizator - PHP nu va face acest lucru în mod automat.

Puteţi utiliza aceeaşi metodă şi în cazul excepţiilor, dupa cum se poate vedea in exemplele de mai jos.

Recuperarea

Dacă utilizaţi PHP 5, mai aveţi o alternativă la tehnicile discutate până acum în noul sistem de tratare a exceptiilor (excepţie este echivalent pentru eroare). Excepţiile sunt noi in PHP (deşi au existat în limbaje cum ar fi Java şi Python de foarte mult timp). În abordarea bazată pe excepţii, codul program este imbricat într-un bloc try(), şi excepţiile generate de acesta sunt "prinse" şi rezolvate printr-un bloc catch(). Pot fi incluse mai multe blocuri catch (), fiecare dintre acestea ocupându-se de un alt tip de eroare; aceasta permite scriptului să prindă diferite tipuri de erori şi să le trateze corespunzător. Iată cum arată un bloc try-catch() tipic :

try { 
    executa acest bloc 
} 
catch (exceptie tip 1) { 
    executa acest bloc pentru a rezolva exceptia de tip 1 
} 
catch (exceptie tip 2) { 
    executa acest bloc pentru a rezolva exceptia de tip 2
} 
... si asa mai departe ...

Când PHP întâlneşte un cod imbricat într-un bloc try-catch(), mai întâi încearcă să execute codul din cadrul blocului try(). Dacă acest cod este procesat fără să fie generată vreo excepţie, controlul se transferă liniilor care urmează blocului try-catch(). Cu toate acestea, dacă este generată vreo excepţie în timp ce rulează codul în cadrul blocului try(), PHP opreşte executarea blocului în acel moment şi începe să verifice fiecare bloc catch() pentru a vedea dacă există un handler adecvat excepţiei. În cazul în care este găsit un handler, este executat codul din blocul catch() potrivit; dacă nu, este generată o eroare fatală. Este posibil chiar să trateze acea eroare fatală într-un mod simplu utilizând excepţii; vedeţi http://www.php.net/set-exception-handler pentru mai multe amănunte cu privire la acest aspect.
Excepţiile sunt generate de catre functia throw, care are ca parametri un mesaj descriptiv şi un cod (opţional) al erorii. În cazul în care apare excepţia, această descriere şi codul vor fi puse la dispoziţia handler-ului de excepţii.
 
Vreţi să vedeţi cum funcţionează? Iată un exemplu:

<?php 
// PHP 5 
 
error_reporting(0); 
 
// incearca acest cod 
try { 
    $file = 'somefile.txt'; 
 
    // deschide fisier 
    if (!$fh = fopen($file, 'r')) { 
        throw new Exception('Fisierul nu a putut fi deschis!'); 
    } 
 
    // citeste continutul fisierului 
    if (!$data = fread($fh, filesize($file))) { 
        throw new Exception(' Fisierul nu a putut fi citit!'); 
    } 
 
    // inchide fisier 
    fclose($fh); 
 
    // afiseaza continutul fisierului 
    echo $data; 
} 
 
// surprinde posibilele erori 
catch (Exception $e) { 
    print 'A survenit o eroare...'; 
} 
 
?>
Pagina:
1 2 »
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(1 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4320
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4190
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4170
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4010
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Javascript Java SWF SEO Photoshop Excel Lightroom Bridge Word CSS Fireworks Swift 3D Fotografie Powerpoint Action Script Vista Gimp Sony Vegas Dreamweaver COREL DRAW Illustrator AJAX PHP Python Verilog HTML Ruby on Rails Flash RoR XML Outlook MySQL StyleSheet PSD XHTML JSON
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software