Wie kann ich statische HTML-Anzeige Nachdem ich die () in einem PHP-Block benutzt habe?

StackOverflow https://stackoverflow.com/questions/307322

  •  08-07-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen, dass ich einige Code wie dieses:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

Ich hoffe, dass der Zweck dieses Code einfach. Wenn eine bestimmte Bedingung erfüllt ist (dh nicht zur Datenbank verbinden), dann sollte das Programm sterben, aber ansonsten sollte es auszuführen. Mein Problem tritt auf, wenn die Funktion des () ausgeführt wird. Es hört auf rechts aus, und sendet nur die ersten drei Zeilen an den Browser, aber nicht die letzten beiden Zeilen.

Gibt es eine funciton, dass ich statt sterben kann (), so dass die PHP-Chunks Ausführung stoppt, aber der statische HTML-Text wird immer noch gesendet durch?

War es hilfreich?

Lösung

Sie sollten Ihre Kopf- und Fußzeilen in eine separaten Dateien und Funktionen werden abscheidet. Dies macht die Benutzeroberfläche viel leichter zu pflegen und hält die Dinge konsequent für die Ansicht zu machen. Paar, das mit der Verwendung von Ausnahmebehandlung und Sie sind golden.

<?php

printHeader(); // outputs the html header
try
{
    if (some condition)
    {
        throw new Exception("It Died...");
    }
    // More processing here that should not execute if the above condition is true
    // ...
}
catch (Exception e)
{
    echo $e->getMessage();
}
printFooter(); // outputs the html footer

?>

Andere Tipps

entkoppeln Ihrer Programmlogik von der Präsentation. Lesen Sie mehr über MVC, Vorlagen.

In einfachsten Form geht es wie folgt aus:

<?php
function logic() {
    if (!$someCondition) {
        return 'display_empty_page';
    } else {
        return 'display_other_stuff';
    }
}

presentation(logic());



Für andere Fälle, in denen die() oder solche unvermeidbar (z fataler Fehler oder 3rd-Party-Code sterben), gibt Hack beteiligt Ausgabe-Handler:

ob_start('myhandler'); 
function myhandler($page) {return $page.' extra markup';}
die();

Obwohl ich empfehlen die Verwendung von, dass nur für diagnostische / Debugging-Zwecke.

Übergeben der einen Parameter des statischen Text sterben.

Für dieses Beispiel ändern:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

Um dies zu:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die("OMG RED ALERT!!!!</body></html>");
}
else{
  #Do something
}
?>
</body>
<html>

Ich würde wahrscheinlich Ausnahmen verwenden. Wickeln Sie alles in einem try / catch-Block, wirft dann eine neue Ausnahme auf einem Fehlerzustand wie ein Datenbankfehler. Man konnte nichts in dem catch-Block (wie ein leere Form () -Methode), aber es wäre besser, eine Fehlermeldung an den Benutzer hier präsentieren zu können.

Hier ist eine ziemlich gute Anleitung auf der Ausnahmebehandlung in PHP5, falls Sie ist nicht mit ihnen vertraut, oder Sie müssen auf auffrischen, was seit PHP4 geändert hat.

Haben Sie sich in mit register_shutdown_function ( php.net) zu beenden Laden der Seite? Es sollte in der Lage sein die() und exit() zu behandeln.

Wenn man sich der PHP-Dokumentation werden Sie sehen, dass „Äquivalente zu verlassen ()“ - dh nannte es Ihr Programm beendet wird und nicht wirklich geben Sie kaum eine Chance, etwas zu tun. Auch außerhalb von ZF, gibt es nicht viel Sie tun können, wenn eine Anwendung der () s. Die Lösung ist Ausnahmen zu verwenden.

Eine abgefangene Ausnahme ist im Wesentlichen dasselbe wie eine Düse () (außer dem Stack-Trace, die erzeugt werden). Was eine Ausnahme gibt Ihnen die Möglichkeit, es in einem try / catch-Block zu setzen, Ihnen die Möglichkeit, den Fehler zu korrigieren und weiter mit dem Programm (oder eine freundliche Fehlermeldung angezeigt und ein Protokoll erstellen). Angenommen, Sie sind mit Zend_Controller_Front, können Sie Besuche die Zend Framework Quick sehen , wie sie machen eine Standard-Fehlerbehandlungsroutine, die nicht abgefangene Ausnahmen und zeigt eine entsprechende Fehlermeldung fangen.

Eine Methode, die funktioniert, ist aber nicht genau das, was ich suche, wäre die() mit die("</body></html>") zu ersetzen. Wenn der Text als das war komplizierter zurückzukehren, es könnte beispielsweise in einer Variablen gespeichert werden. Gibt es etwas Schöneres als das?

die() vielleicht nicht genau das, was Sie hier wollen. Warum nicht ersetzen

if (!$someCondition) { 
    die();
} else {
    /* do stuff */
}

mit

if ($someCondition) {
    /* do stuff */
} else {
    /* output error message/redirect/output nothing/whatever */
}

oder werfen / eine Ausnahme fangen?

Wenn Sie mit PHP4 arbeiten, oder wollen einfach nicht mit Ausnahmen stören, dann könnte man diese Technik verwenden:

<html>
<head><title>Title</title></head>
<body>

<?php
do {
    if (!$someCondition){
          break;
    } else {
          #Do something
    }
} while (0);
?>
</body>
<html>

.. obwohl einige Leute ziemlich entgegengesetzt scheinen diese Art zu verwenden, entsprechend kommentiert, ich sehe keine Probleme mit ihm. Ich würde sagen, es ist viel besser als Ihr „Footer“ Code in jedem Ihrer Form () Aussagen zu duplizieren.

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
header ("location:error_page.php?erro_message='This error occured'");

  die();
}
else{
  #Do something
}
?>
</body>
<html>

error_page.php

header
echo $_GET[$error_message];
footer
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top