[php] terminating require?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben op zoek naar een oplossing voor het volgende probleem:

een layout.php definieert de opmaak van de pagina en "require-t" een pagina met de main-content. Nu ben ik bezig met de error handling. De output van main wordt gebufferd, als er een $_error wordt geset, mag de buffer niet geoutput worden maar moet de $_error geprint worden.

Het probleem is dat ik in sommige situaties het parsen van de main moet stoppen (om veiligheids redenen) zodra een $_error geset is. Maar met exit; knalt ook de error handling in layout.php eruit, want hij stopt simpelweg met alle php parsing.

Ik ben dus op zoek naar een manier om het parsen van de main (die wordt gerequiret) te stoppen maar het layout.php wel helemaal uit te voeren.

Uiteraard kan iets als
PHP:
1
2
3
4
if( not_okay )
    $_error = "bla"
else
    //print page


maar dat is erg lelijk om in alle main bestanden te implementeren

Is hier een mooie oplossing voor?

[ Voor 12% gewijzigd door Verwijderd op 02-08-2004 12:32 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 12:57

Robtimus

me Robtimus no like you

Output buffering niet iets voor je? Dan print je als er niks fout is gegaan, en clear je bij een fout. Zoek maar ff op GoT of google.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

In PHP5 wel... daar kun je een exception opgooien.

In principe kan dat met PHP4 ook wel, daar kun je met trigger_error() user-errors gaan gooien, en die in een error-handler weer afvangen.

Acties:
  • 0 Henk 'm!

  • Boogie
  • Registratie: Januari 2001
  • Laatst online: 06-11-2024
Misschien gewoon
code:
1
2
3
while (!ISSET($_ERROR)){
 
}

of denk ik nu te simpel?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
IceManX schreef op 02 augustus 2004 @ 12:37:
Output buffering niet iets voor je? Dan print je als er niks fout is gegaan, en clear je bij een fout. Zoek maar ff op GoT of google.
Ik buffer de require. Als er in de main dus een $_error geset wordt, wordt die geprint en niet buffer. Het probleem is juist het parsen van de main stoppen als de $_error geset is zonder de layout.php te stoppen.

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Misschien is set error handler wel iets om even te bestuderen. :)

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Ik ben er niet 100% zeker van dat ik je situatie goed begrijp, maar wil je niet gewoon return gebruiken om alleen uit de executie van main.php te springen en verder te gaan in layout? Dat geeft dus zo'n effect:

layout.php
PHP:
1
2
3
4
5
6
7
8
9
<html>
<body>
<?php
include('main.php');
if(isset($error))
    echo 'Er gaat iets fout.';
?>
</body>
</html>


main.php
PHP:
1
2
3
4
5
6
7
8
9
<h1>Main</h1>
<?php
if($whatever)
{
    $error = 'Rhaaa!';
    return;
}
?>
<p>Alles gaat goed!</p>


Eenvoudig, maar weinig mensen weten dat je ook uit een bestand (dus niet een functie) kunt returnen. Overigens is het ook mogelijk om de foutmelding te returnen vanuit het main script! Dat ziet er dus zo uit:

layout.php
PHP:
1
2
if(!empty($result = include('main.php')))
    echo 'Fout: ', $result;


main.php
PHP:
1
2
if($whatever)
    return 'File foo.bar not found!';

[ Voor 10% gewijzigd door Soultaker op 02-08-2004 15:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey Maks!

Dank voor je reactie, return vanuit een file is wat ik zocht!
Pagina: 1