[PHP] Error handler functie in variabele stoppen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Plankje
  • Registratie: November 2002
  • Laatst online: 14-09-2023
Ik ben bezig met een error-handler functie, waarbij zowel door php als door mijn eigen code gegenereerde fouten in een variabele worden gezet ($error_bericht). Voor de behandeling van de php foutmeldingen heb ik de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?
  error_reporting (E_ALL);
  $error_bericht = "";

  function error_functie ($errno, $errstr, $errfile, $errline, $errcontext) {
    $error_type = array (
                  E_ERROR           => "Error",
                  E_WARNING         => "Warning",
                  E_PARSE           => "Parsing Error",
                  E_NOTICE          => "Notice",
                  E_CORE_ERROR      => "Core Error",
                  E_CORE_WARNING    => "Core Warning",
                  E_COMPILE_ERROR   => "Compile Error",
                  E_COMPILE_WARNING => "Compile Warning",
                  E_USER_ERROR      => "User Error",
                  E_USER_WARNING    => "User Warning",
                  E_USER_NOTICE     => "User Notice",
                  E_STRICT          => "Runtime Notice"
                  );

    global $error_bericht;
    $error_bericht .= $errstr;
  }

  set_error_handler ("error_functie");
  print 5 / 0; //simpele divide by 0 foutmelding;
  echo $error_bericht;
?>

Wat ik dus zou verwachten is dat nu de foutmelding wordt uitgespuugd, maar in plaats daar van krijg ik een lege error_bericht. Wat ik uiteindelijk wil bereiken met het stoppen van de foutmelding in een variabele is dat ik die dan netjes in mijn templates kan verwerken dmv iets als {foutmelding}. Zodat als er een notice of een warning is dat dan niet gelijk mijn hele layout kapot gaat en daarnaast kan ik die variabele dan in andere functies aanvullen met foutmeldingen die niet door PHP gegeneerd zijn.
Ik zit er al de hele avond op te knagen maar het wilt maar niet lukken om die $error_bericht buiten de functie gevuld te krijgen met mijn foutmelding. Als ik hem binnen de functie print dan lukt het wel.
Op de site van PHP wordt ook niet ingegaan in het plaatsen van de foutmelding in een variabele. Daar gaat men er steeds van uit dat de foutmelding wordt geplaatst op de plek waar die voorkomt.

Ik gebruik PHP 5.0.5.

[ Voor 14% gewijzigd door Plankje op 03-02-2006 00:17 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Let er wel op dat in het voorbeeld op php.net ze set_error_handler aanroepen vóórdat ze een error veroorzaken. ;) Ten tijde van de divide by zero weet jouw script nog niet van een custom error handler af.

{signature}


Acties:
  • 0 Henk 'm!

  • Plankje
  • Registratie: November 2002
  • Laatst online: 14-09-2023
Voutloos schreef op vrijdag 03 februari 2006 @ 00:15:
Let er wel op dat in het voorbeeld op php.net ze set_error_handler aanroepen vóórdat ze een error veroorzaken. ;) Ten tijde van de divide by zero weet jouw script nog niet van een custom error handler af.
o dat was een fout in het overtypen :$. is al gefixt... het werkt nog steeds niet btw :p

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-06 18:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik heb jouw script letterlijk gecopypaste (ok, ik heb die regel met E_STRICT uitgecomment want die herkende PHP niet), en bij mij werkt het toch echt :)

PHP 4.4.2

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Stamgastje
  • Registratie: April 2003
  • Laatst online: 02-02-2020
Hier werkt het ook, PHP 5.0.5 op Linux. Heb je niet iets raars in je file staan? Een verkeerde regeleinde waardoor de echo regel achter het commentaar komt te staan (en het dus effectief niet uitgevoerd wordt)?

Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 07-06 20:59

Swaptor

Java Apprentice

Hier op PHP4.3.9 onder Windows ook strakke werking.
Misschien wazige php.ini instelling?

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


Acties:
  • 0 Henk 'm!

  • m-kay
  • Registratie: December 2004
  • Laatst online: 16-06-2024

m-kay

kaas & aapjes

Ik zit nu ook mijn huidige error_handler om te schrijven naar PHP5 en loop tegen hetzelfde probleem aan als TS.

PHP:
1
2
3
4
5
6
7
8
function error_handler($errno, $errstr, $errfile, $errline) 
{
  global $errortype;

  echo $errstr." ".$errortype[$errno]."\r\n";
}

set_error_handler('error_handler', E_USER_NOTICE); //alleen E_USER_NOTICE laten afhandelen door de custom errorhandler (testen)

Kan helaas nog geen php.ini directives setten in de .htaccess (vanwege testomgeving), dus dat los ik tijdelijk zo op:

PHP:
1
2
3
ini_set('display_errors', '1');
ini_set('error_reporting', 2047); //E_ALL
ini_set('html_errors', '0');

Hierna voer ik onderstaande tests uit...
PHP:
1
2
3
4
5
6
7
trigger_error("test", E_USER_NOTICE);
trigger_error("test", E_USER_WARNING);
trigger_error("test", E_USER_ERROR);

print 5/0;

echo "test";

met de volgende output...

PHP:
1
2
3
4
5
test User Notice

Warning: test in /home/mp3-tunes.com/dev/test.php5 on line 20

Fatal error: test in /home/mp3-tunes.com/dev/test.php5 on line 21

Zoals je ziet wordt de USER_NOTICE netjes afgehandeld door de custom errorhandler, en de andere errors worden ook afgehandeld, hetzij door PHP.

Echter, de nuldeling wordt hier niets mee gedaan. That is, geen foutmelding, maar de executie van het script stopt wel, aangezien "test" niet meer geprint wordt.

Iemand enig idee waardoor ook bij mij geen error wordt weergegeven bij die nuldeling?

I look back and I'm amazed, that my thoughts were so clear and true, and three words went through my mind endlessly, repeating themselves like a broken record... you're so cool, you're so cool, you're so cool...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

De executie van je script wordt gestopt omdat je op regel 3 een error opwerpt. Uit de manual:
E_USER_ERROR
User-generated error message. This is like an E_ERROR, except it is generated in PHP code by using the PHP function trigger_error().
en:
E_ERROR
Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted.
Je script komt dus niet eens aan bij die nuldeling. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • m-kay
  • Registratie: December 2004
  • Laatst online: 16-06-2024

m-kay

kaas & aapjes

Ok, dan heb ik m'n voorbeeld misschien wat slecht verwoord. Echter, het probleem blijft bestaan. :P.

PHP:
1
2
3
4
5
echo "test";

echo 5/0;

echo "test";


geeft als output

PHP:
1
testtest


De nuldeling wordt dus niets mee gedaan. Ook als ik ergens expres een parse-error maak, dan levert dit geen error op, slechts een leeg scherm. :).

[ Voor 15% gewijzigd door m-kay op 11-03-2006 15:01 ]

I look back and I'm amazed, that my thoughts were so clear and true, and three words went through my mind endlessly, repeating themselves like a broken record... you're so cool, you're so cool, you're so cool...


Acties:
  • 0 Henk 'm!

  • m-kay
  • Registratie: December 2004
  • Laatst online: 16-06-2024

m-kay

kaas & aapjes

Probleem opgelost, ligt aan het feit dat PHP nog niet als module draait. :).

I look back and I'm amazed, that my thoughts were so clear and true, and three words went through my mind endlessly, repeating themselves like a broken record... you're so cool, you're so cool, you're so cool...

Pagina: 1