Home » Articole » Articole » Calculatoare » Programare » PHP » Repararea erorilor în PHP

Repararea erorilor în PHP

postat în: PHP 0

Înainte de a începe, înțelegerea erorilor în PHP vă va ajuta să recunoașteți rapid unde există probleme (și dacă sunt cu adevărat probleme) în codul dvs., ceea ce va permite o depanare mai rapidă și înțelegerea a unde să căutați probleme.

Pentru început, putem spune despre PHP ce fel de erori vrem să verificăm înainte de a rula un script. Deși lista completă a nivelurilor de raportare acceptate (consultați Tabelul 8 Erori PHP) acoperă o varietate de preocupări, există câteva (notificări, erori și avertismente) care acoperă situațiile cu care ne vom întâlni cel mai des.

Notificări

Notice: Undefined index: message in /home/example.php on line 9

Notificările, din punct de vedere tehnic, nu sunt erori. Ele ne vor anunța despre lucrurile pe care le-am fi dorit sau pe care le-am dorit, dar fără de care PHP se poate descurca. De exemplu, utilizarea unei variabile pe o pagină fără a o declara mai întâi va genera o notificare. PHP va crea variabila de îndată ce este apelată, chiar dacă nu am declarat-o, fără a crea o eroare formală (alte limbaje ar considera aceasta o eroare demnă de a întrerupe execuția). Anunțându-ne, dar continuând, dacă am fi declarat sau folosit deja variabila în altă parte, această notificare ar indica o eroare de ortografie sau un nume de variabilă introdus greșit.

Avertizări

Warning: main(): Failed opening ‘noFileHere.php’ for inclusion on line 2

Avertiările nu vor opri rularea scriptului nostru, dar indică faptul că ceva a mers prost în timpul execuției unui script. Încercarea de a utiliza include() într-un fișier care nu există ar crea o avertizare.

Erori

PHP Fatal error: Undefined class constant ‘MYSQL_ATTR_USE_BUFFERED_QUERY’ in database.inc on line 43

În cele din urmă, erorile sunt irecuperabile (execuția se va opri). Cauzele tipice ale erorilor sunt erorile de analiză, cum ar fi lipsa punct și virgulă, a definițiilor de funcție sau de clasă sau alte probleme pe care motorul nu știe cum să le rezolve. Dacă am folosit require() într-un fișier în loc de include, ar fi declanșată o eroare.

Cele mai multe erori pe care le vom primi sunt erori de analiză. Sunt de obicei probleme cauzate de ceea ce am scris în codul nostru, cum ar fi lipsa parantezelor, punct și virgulă sau a greșelilor de scriere. Când primim o eroare, compilatorul ne va spune ce problemă a descoperit și unde. Rețineți că ni se spune unde a fost găsită o eroare și nu neapărat acolo unde există sursa problemei. De exemplu, este posibil ca un punct și virgulă sau o paranteză lipsă să fi apărut în mai multe rânduri înainte de a crea probleme pentru compilator.

Cealaltă categorie de erori cu care ne vom confrunta sunt cele logice. Acestea sunt erori cauzate de modul în care am scris codul nostru și pot fi mult mai frustrante. Erorile logice sunt de obicei descoperite atunci când scriptul nu se comportă conform așteptărilor. Sursa poate fi greșeli în codul pe care îl executăm în diferite părți ale unei declarații if/then sau chiar o eroare de matematică folosită într-o funcție care ne oferă o soluție greșită.

Rezolvarea erorilor poate fi o formă de artă. În cazul erorilor de analiză, motorul vă poate ghida către zonă pentru a vă ajuta să începeți să căutați sursa erorii. Erorile logice pot fi de obicei rezolvate prin adăugarea de ieșiri temporare suplimentare pentru a urmări valoarea unei variabile sau urmărirea execuției instrucțiunilor logice printr-un script. Această tehnică vă poate ajuta să aflați unde diferă ceea ce se întâmplă față de ceea ce vă așteptați. Testarea unitară a funcțiilor dvs. va contribui în mare măsură la prevenirea multor dintre aceste probleme, la fel ca și programarea iterativă.

Pentru a dicta ce erori facem și nu dorim să le vedem în rezultatul scriptului nostru, vom folosi funcția error_reporting(). Trecând una sau mai multe dintre constantele de mai jos, controlăm ceea ce este raportat. De exemplu, poate dorim informații despre avertizări și erori, dar nu ne pasă de notificări. Pentru a face acest lucru, putem apela error_reporting(E_WARNING | E_ERROR).Simbolul conductei ( | ) funcționează ca un sau în acest caz. Dacă vrem să vedem totul, cu excepția notificărilor, putem folosi E_ALL, dar omitem notificările cu caracterul morcov (^) pentru a indica o excepție cu error_reporting(E_ALL ^ E_NOTICE). Este o practică bună să setați nivelul de raportare a erorilor aproape de partea de sus a scriptului, astfel încât să îl puteți găsi cu ușurință și să modificați setările:

<?php
    error_reporting(E_WARNING | E_ERROR);
//This next line will trigger a notice that the variable does not exist, but we will not see it
echo $test;
?>
<?php
error_reporting(E_ALL);
//This time we will see the notice
    echo $test;
?>
Notice: Undefined variable: test on line 3

S-ar putea să vă întrebați de ce am arăta sau ascunde în mod selectiv erorile; atunci când dezvoltăm codul, erorile de sistem pe care va trebui să le vedem pentru a le remedia sunt diferite de ceea ce am dori să vadă utilizatorii finali pentru un sistem aflat în producție. Dezvăluirea, textual, a mesajului de eroare generat de sistem nu este numai confuz pentru non-programatori, dar poate expune informațiile sensibile celor cu intenții rău intenționate. În schimb, vom furniza un mesaj pe care l-am ales în locul erorii. Aruncați o privire la lista completă a nivelurilor de raportare a erorilor:

Tabelul 8 Erori PHP

  • Constanta: Descriere
  • E_ERROR: Erori fatale de rulare. Acestea indică erori din care nu se poate recupera, cum ar fi o problemă de alocare a memoriei. Executarea scriptului este oprită.
  • E_WARNING: Avertismente de timp de rulare (erori non-fatale). Execuția scriptului nu este oprită.
  • E_PARSE: Erori de analiză în timpul compilării. Erorile de analizare ar trebui să fie generate numai de parser.
  • E_NOTICE: Notificări de timp de execuție. Indică faptul că scriptul a întâlnit ceva care ar putea indica o eroare, dar s-ar putea întâmpla și în cursul normal al rulării unui script.
  • E_CORE_ERROR: Erori fatale care apar în timpul pornirii inițiale a PHP. Acesta este ca un E_ERROR, cu excepția faptului că este generat de nucleul PHP.
  • E_CORE_WARNING: Avertismente (erori non-fatale) care apar în timpul pornirii inițiale a PHP. Acesta este ca un E_WARNING, cu excepția faptului că este generat de nucleul PHP.
  • E_COMPILE_ERROR: Erori fatale la timp de compilare. Acesta este ca un E_ERROR, cu excepția faptului că este generat de Zend Scripting Engine.
  • E_COMPILE_WARNING: Avertismente în timpul compilării (erori non-fatale). Acesta este ca un E_WARNING, cu excepția faptului că este generat de Zend Scripting Engine.
  • E_USER_ERROR: Mesaj de eroare generat de utilizator. Acesta este ca un E_ERROR, cu excepția faptului că este generat în codul PHP utilizând funcția PHP trigger error().
  • E_USER_WARNING: Mesaj de avertizare generat de utilizator. Acesta este ca un E_WARNING, cu excepția faptului că este generat în cod PHP utilizând funcția PHP trigger_error().
  • E_USER_NOTICE: Mesaj de notificare generat de utilizator. Acesta este ca un E_NOTICE, cu excepția faptului că este generat în cod PHP utilizând funcția PHP trigger_error().
  • E_STRICT: Activați pentru ca PHP să sugereze modificări ale codului dvs., ceea ce va asigura cea mai bună interoperabilitate și compatibilitate directă a codului dvs.
  • E_RECOVERABLE_ERROR: Eroare fatală recuperabilă. Indică faptul că a apărut o eroare probabil periculoasă, dar nu a lăsat motorul într-o stare instabilă. Dacă eroarea nu este detectată de un handle definit de utilizator (consultați, de asemenea, set error handler()), aplicația se anulează deoarece a fost o E_ERROR.
  • E_DEPRECATED: Notificări de timp de execuție. Activați acest lucru pentru a primi avertismente despre codul care nu va funcționa în versiunile viitoare.
  • E_USER_DEPRECATED: Mesaj de avertizare generat de utilizator. Acesta este ca un E_DEPRECATED, cu excepția faptului că este generat în cod PHP utilizând funcția PHP trigger_error().
  • E_ALL: Toate erorile și avertismentele, așa cum sunt acceptate, cu excepția nivelului E_STRICT anterior PHP 5.4.0.

Adaptar din php.net, Creative Commons 3.0 Attribution Unported

Sursa: Michael Mendez, The Missing Link – An Introduction to Web Development and Programming (CC BY-NC-SA 3.0 License), Published by Open SUNY Textbooks, Milne Library (IITG PI), State University of New York at Geneseo. Traducere de Nicolae Sfetcu

Ghid WordPress pentru dezvoltatori
Ghid WordPress pentru dezvoltatori

WordPress este o platformă pentru site-uri web rapidă, fiabilă, cu facilități multiple pentru dezvoltatori și ușor de utilizat. Totusi, dezvoltatorii și beneficiarii au de multe ori nevoie să adauge funcționalități suplimentare pentru a răspunde nevoilor lor. Acest ghid oferă unele … Citeşte mai mult

Nu a fost votat $3.99 Selectează opțiunile
Ghid WordPress pentru începători
Ghid WordPress pentru începători

WordPress combină simplitatea pentru utilizatorii şi editori cu complexitate suportului software pentru dezvoltatori. Acest lucru îl face mai flexibil, fiind în acelaşi timp uşor de utilizat. Simplitatea sa face posibilă instalarea şi publicarea online rapid. Nimic nu ar trebui să … Citeşte mai mult

Nu a fost votat $2.99$4.77 Selectează opțiunile
Proiectarea, dezvoltarea şi întreţinerea siturilor web
Proiectarea, dezvoltarea şi întreţinerea siturilor web

Un ghid pentru dezvoltatorii web, cu accent pe HTML, XML, JavaScript, SQL, tehnologii web, software web, software pentru dezvoltare web, aplicaţii web, şabloane pentru aplicaţii web, AJAX, servicii web, sindicalizarea web, web design, situri web, găzduirea web, analiza siturilor web, … Citeşte mai mult

Nu a fost votat $2.99$11.97 Selectează opțiunile

Lasă un răspuns

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