Out of Memory error handling

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jaws

Jaws

21/03/2008 17:00:00
Quote Anchor link
Hoe kun je een error die voorkomt uit de 'memory_limit' ini setting opvangen?
Nu stopt het script gewoon zonder enige error output. Of is dit nog niet mogelijk met PHP?
 
PHP hulp

PHP hulp

03/12/2024 18:53:15
 
Jelmer -

Jelmer -

21/03/2008 17:52:00
Quote Anchor link
Ik zag laatst een manier om ob_start te gebruiken voor het controleren op een 'clean run'. Misschien dat dit ook werkt bij memory_limit errors. Het was zoeits:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function ob_clean_run_callback($buffer)
{

   global $cleanExit;
   if($cleanExit) {
      return $buffer;
   }
else {
      return 'Foutje';
   }
}


$cleanExit = false;

ob_start('ob_clean_run_callback');

echo 'Doe hier iets dat een foutmelding oplevert';

echo 'En als het goed is wordt $cleanExit dan niet true';

$cleanExit = true;
?>
 
Jaws

Jaws

21/03/2008 18:42:00
Quote Anchor link
Ok, thx. Zal het eens gaan proberen.
 
Jaws

Jaws

22/03/2008 11:46:00
Quote Anchor link
Getest en het werkt idd.

Laatst was er een beetje een discussie over dat OB nooit echt zinnig gebruikt kon worden (behalve bij vriendinnen, want PHP bloedt niet). Volgens mij is dit dan een voorbeeld waar OB je wel tot hulp kan zijn. Als iemand een andere oplossing hiervoor heeft hoor ik die graag.

En kom niet aan met: "zet je max_memory ini setting hoger" ;)
Gewijzigd op 01/01/1970 01:00:00 door Jaws
 
Jelmer -

Jelmer -

22/03/2008 12:14:00
Quote Anchor link
Ik weet niet, misschien dat je met een eigen errorhandler (set_error_handler) wel deze fout kan afvangen.

ob heeft overigens eigenlijk maar 1 nadeel, en naar mij idee is het ook het enige excuus om het niet te gebruiken is dat PHP alle uitvoer vasthoudt totdat de pagina volledig klaar is. Normaal, wanneer je echo't wordt de uitvoer direct doorgegeven aan Apache, die het indien mogelijk meteen zal opsturen. Je ziet de pagina dus langzaam binnenkomen. ob_start() zorgt ervoor dat alle uitvoer op het einde in 1 keer aan Apache wordt gegeven, waardoor de hele pagina in 1 keer moet worden gedownload, en de browser niet vooraf kan beginnen met parsen. Daarentegen heb ik wel weer verhalen gelezen dat ob_start() echo sneller maakt, omdat echo dan niet telkens met Apache hoeft te praten. Met ob_flush() kan je dan handmatig zo nu en dan doortrekken.

("want het is vies" is een ethische uitspraak, en programmeren is niet ethiek, dus dat argument vind ik slecht)
 
Joren de Wit

Joren de Wit

22/03/2008 12:18:00
Quote Anchor link
De terminologie 'smerig' voor de functie ob_start() komt van het feit dat deze functie vaak als lapmiddel misbruikt wordt om de bekende 'headers already sent' foutmelding te verhelpen. Dat deze functie daar niet voor bedoeld is, moge duidelijk zijn...

Natuurlijk zijn er toepassingen waarin je wel gebruik zou willen maken van deze buffer functie, maar dat komt alleen voor als je inderdaad output vast wilt houden en in 1x wilt verzenden, om wat voor reden dan ook.
 
Jaws

Jaws

22/03/2008 12:23:00
Quote Anchor link
@jelmer: denk het niet van die error handler. Gebruik er zelf een in het script, maar volgens mij retourneert PHP gewoon geen fout-code als hij uit het geheugen loopt. Dan kun je ook niets handlen daarme lijkt me.

Voor de rest ben ik met jullie eens over output buffering. In een ander topic werd output buffering in het algemeen als vies bestempeld en dat leek me niet helemaal op zijn plaats, zo bewijst ook dit voorbeeld.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.