• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Procesarea exceptiilor – clasa rescrisa : try { } catch {} in PHP

2
  • Publicat de Andrei Avădănei
  • în PHP · Tehnic
  • — 14 oct., 2009 at 8:58 pm

exceptionIn urmatoarele saptamani incet incet voi prezenta mini-idei care dupa parerea mea sunt interesante din toate punctele de vedere : studiu, utilitate etc.

Astazi vom incerca sa lucram si sa tratam exceptiile in PHP.Pentru inceput vom incerc sa explicam despre ce este vorba. In general, pentru a putea administra mai dragut o aplicatie PHP putem „ridica” niste mesaje care vor opri executia codului si care vor putea fi interpretate de administrator : afisarea,stocarea mesajelor de eroare etc. Practic vom avea posibilitatea de a opri executia codului , creand propriile noastre erori de „sintaxa”,”logica” etc.

Pentru asta vom folosi o clasa pusa la dispozitia programatorilor PHP : „Exception” . Aceste exceptii pot fi interceptate de „operatorii” :

try { } catch() {}

Vom lucra direct pe exemplu :

< ?php
  
  try
 {
   ....
       
   if(ceva_nu_e_bine)
   {
      throw new Exception("Nu ne convine o chestie"); //aruncam eroarea
   }     
        
   ....
 }
 catch(Exception $e)
 {
      //prindem eroarea in $e
      echo $e->getMessage(); //afisam mesajul : "Nu ne convine o chestie "
 }
?>

Practic daca noi dori sa ridicam o exceptie intr-un anumit punct, codul va sari pana la „catch” dupa care va executa codul de acolo si va trece mai departe dupa „catch”.Clasa mai suporta cateva functii ce le puteti gasi la structura clasei.

Ok , toate bune si frumoase…dar ce ar fi sa putem lucra mai dragut cu logurile, sa nu afisam exceptiile pe ecran ci sa le salvam intr-un FISIER si nu in baza de date, ceva gen „log acces”. Problema la log acces este ca exista sanse sa fie descoperite de un utilizator.Voi prezenta o clasa extinsa a celei prezentate mai sus, si un mic sistem care adauga logurile intr-un fisier „special”, informatiile neavand posibilitatea de a fi vizualizate decat de anumite persoane cu un acces specific.

Mai exact, logurile vor fi stocate intr-un fisier PHP, dar logurile vor putea afisate doar daca vom accesa linkul de forma : logs.php?show=logs . Aceasta idee poate fi dezvoltata, avand posibilitatea de a face si un mini sistem de autentificare.

Pentru inceput vom extinde clasa Exception folosind de acum cException.

class cException extends Exception
{
	private $showErrorToClient = FALSE;
	
	public function __construct($message = "",$status = 0)
	{
		$this->showErrorToClient = $status;
		parent::__construct($message);
	}
	
	public function getErrorMessage()
    {
        $error = "Error on line ".$this->getLine()." in ".$this->getFile()." : ".$this->getMessage();
        return $error;
    }
	
	public function getStatus()
	{
		return $this->showErrorToClient;
	}
}

Pentru a adauga logurile vom crea o functie ce va salva logurile :

       	private function addErrorLog($message)
	{
		$logsFile = "logs/error.logs.php"; //fisierul in care se salveaaz logurile
		$fh = fopen($logsFile,"r");
		if(!$fh) return FALSE;
		
		$content = ""; while(!feof($fh)) $content .= fread($fh,1024); fclose($fh);
		 
		preg_match('/\$content="(.*?)";/s',$content,$oldContent);
		 
		$newContent = $oldContent[1].$message."\r\n";
		$content    = "< ?php\r\n\$content=\"".$newContent."\";\r\n". substr($content, strpos($content,"########"));
		$fh = fopen($logsFile,"w");
		if($fh) 
		{
			fwrite($fh,$content,strlen($content));
			fclose($fh);
		}
	}

Avem nevoie sa "prelucram putin" fisierul error.logs.php pentru a fi gata pentru inregistrarea problemelor.

< ?php
$content="
";
################
if(isset($_GET['show']) && $_GET['show'] == 'logs')
{
	echo $content;
}
else
{
	header("HTTP/1.0 404 Not Found");
	echo "404 Not Found 

Not Found

The requested URL /logs/error.logs.php was not found on this server.


Apache Server at site.com Port 80
"; } ?>

Acum modificarile la primul exemplu de lucru cu clasa Exception.

      < ?php
  
  try
 {
   ....
       
   if(ceva_nu_e_bine)
   {
      throw new cException("Nu ne convine o chestie"); //aruncam eroarea de tip cException
   }     
        
   ....
 }
 catch(cException $e)
 {
      //prindem eroarea in $e de tipul cException
      addErrorLog($excpt->getErrorMessage());
 }

Acum cand vom accesa fisierul logs/error.logs.php va returna cod 404(fisier inexistent) dar daca vom apela logs/error.logs.php?show=logs va returna intregul log.

In urmatoarele cateva articole ne vom folosi de clasa cException asa ca stati pe aproape de ea.

Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!

Etichete: catchcexceptionexceptiiexceptionPHPtry

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior Google lanseaza Building Maker: Creaza constructii 3D online
  • Articolul următor Un smartphone si un mini-laptop de la Acer cu sistemul Android

2 Comentarii

  1. Incarcarea claselor in obiecte dinamic - PHP | WorldIT spune:
    octombrie 15, 2009 la 7:02 pm

    […] ca functia loadClass() are ca dependenta clasa cException studiata data trecuta pentru tratarea erorilor de genul : fisier , argumente , definirea clasei […]

  2. Procesarea fisierelor XML in obiecte si lucrul cu acestea - PHP | WorldIT spune:
    octombrie 18, 2009 la 12:28 pm

    […] de baza ce pot fi efectuate asupra unui fisier XML.Aceasta are ca dependenta majora clasa cException, studiata si prezentata in urma cu cateva zile pe […]


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    • imacoolat-curat.ro
      | Published: februarie 3, 2020 - 2:00 am
    • hotel-palace.ro
      | Published: februarie 2, 2020 - 2:00 am
    • www.tahometru.ro
      | Published: februarie 1, 2020 - 2:00 am
    • alexisart.ro
      | Published: ianuarie 30, 2020 - 2:00 am
    • justshop.ro
      | Published: ianuarie 29, 2020 - 2:00 am
    RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • ianuarie 2021
    L Ma Mi J V S D
    « dec.    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • PHP
  • Procesarea exceptiilor – clasa rescrisa : try { } catch {} in PHP
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons

Multumim foarte mult ca ne-ai raportat greseala! O vom remedia in cel mai scurt timp posibil.