Out of Memory error handling
Nu stopt het script gewoon zonder enige error output. Of is dit nog niet mogelijk met PHP?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
?>
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;
?>
Ok, thx. Zal het eens gaan proberen.
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
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)
Ik weet niet, misschien dat je met een eigen errorhandler (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)
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.
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.