[php] warnings uit track_erros halen

Pagina: 1
Acties:

Onderwerpen


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik maak in een script gebruik van de mogelijkheid om de laatste error-message in een variabele te stoppen. Hier controleer ik op en afhankelijk daarvan moet bepaalde code worden uitgevoerd. Het irrittante is alleen dat dit niet beïnvloed wordt door de error_reporting(); ook al staat ie niet op E_ALL, $php_errormsg (de variabele die die laatste error bevat), wordt toch gevuld met warnings.
Om de reacties te voorkomen dat je error reporting niet lager moet zetten omdat het vies is, etc. etc., een kleine uitleg waarom:

ik gebruik het voor een script wat een file kan includen voor een benchmark. Maar om te voorkomen dat er 5000x een error naar je scherm wordt gestuurd controleer ik in die loop of $php_errormsg gezet is of niet. Vandaar. Het moet dus gewoon ook werken als er een keer een file wordt geinclude die niet aan de E_ALL standaards voldoet.

Weet iemand hoe (of?) dat aan te passen is? Ik kan het namelijk op php.net (en de search hier) niet vinden.

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
PHP:
1
2
3
4
if(eregi("fatal error"))
{
    .....
}

misshien.

Dus ff een regual expression op je $php_errormsg los laten voor je blok code uitvoerd

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ja
dat heb ik me ook al zitten bedenken
het wordt dan niet "fatal error" maar gewoon checken met een substr of de eerste 7 karakters het woord 'warning' vormen. Maar dat vind ik een beetje zonde om precies daar te doen aangezien ik dan in die loop van de benchmark zit. dan is ie dus 5000x zo'n substr aan het uitvoeren. Dus dat wil ik liever niet

zo'n simpele isset() leek me verwaarsloosbaar en kan ook de resultaten niet echt beinvloeden omdat het bij geen-error altijd !isset() is
maar als ie warnings moet gaan onderdrukken dan kan het tussen twee tests heel veel uit gaan maken als ie bij de ene wel iets onderdrukt en bij de ander niet...

[ Voor 33% gewijzigd door marty op 21-08-2003 01:36 ]


  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Is dit een oplossing? Zet dit vOOr je loop.
PHP:
1
error_reporting(0);


Of wil je ook errors opvangen uit je loop? Dat vat ik hier niet helemaal.

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
zoals ik al schreef maakt het niet uit wat je met de error reporting doet. (zowiezo kun je 'm beter gewoon bovenaan je script zetten; 'm dichter bij de loop zetten zal niets uitmaken).
Als ik m'n error_reporting op zonder warnings heb staan dan breekt m'n code nog steeds uit de (benchmark) loop (doordat $php_errormsg wel een warning bevat) - alleen zie ik dan de foutmelding niet

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function runtimeError($level, $description, $file, $line)
{
        /* If an '@' is standing in front of the statement in which the
        error occurred, don't 'log' the error. */
        if ( !error_reporting() )
            return;

        if ( $level === E_WARNING || $level === E_USER_WARNING )
            return;
        $GLOBALS['lastError'] = $description;
}

set_error_handler('runtimeError');


:?

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
IK heb het geprobeerd, maar helaas worden parse errors nog gewoon door de standaard handler afgewerkt. Nou zou ook daar nog wel overheen te komen zijn door het in combinatie te gebruiken met track_errors, maar die stopt helaas met werken op het moment dat je deze functie gebruikt :(

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik zat er nu aan te denken om gewoon eerst 1 trial te doen en kijken of die fouten oplevert. Dan kan ik gewoon van die track_error gebruik blijven maken. Het enige wat je dan moet doen is contrleren of de error_reporting op E_ALL staat of niet (dat lukt) en of de foutmelding een warning is of niet - maar dat lukt niet. Ik was er per ongeluk ff vanuit gegaan dat die $php_errormsg de gehele normale foutmelding zou bevatten en dat er dus vooraan in de string Warning zou staan. Pindakaas. Als je een variabele vergeet de derinieren bevat die variabele iets als: Undefined variable: bla.

Mijn opties zoals ik ze nu zie
1. uitzoeken wat voor soort foutmeldingen warnings geven. Begint dat altijd met Undefined ..... ? Of zijn er nog andere. Ik kan het ff niet bedenken eigenlijk
2. Toch nog een manier zien te vinden om te voorkomen dat warnings door track_error verwerkt worden (en in $php_errormsg) terecht komen)

Verwijderd

Sorry, maar ik kan je niet helemaal volgen :? Maar als je die code die ik had gegeven gebruikt, en dan ipv. $php_errormsg de variabele $lastError gebruikt, dan gaat het toch goed? :)

edit:

Sorry, dit werkt idd niet, was er niet helemaal bij met m'n gedachten |:(

[ Voor 22% gewijzigd door Verwijderd op 21-08-2003 23:04 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
nee, want zoals ik in m'n reply daarop ook al zei worden parse errors daar niet door afgevangen

[ Voor 5% gewijzigd door marty op 21-08-2003 19:54 ]

Pagina: 1