kostenloser Webspace werbefrei: lima-city


PHP die() -> Apache Fehlerseiten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Hi,

    im Manual findet man, dass man bei Abbruch durch die() einen Fehlercode übergeben kann, wozu ist das gut? Wird dadurch dann ein Fehlercode gesendet?
    Kann man irgendwie über die() auf die Fehlerseiten vom Apache zurückgreifen, bzw. diese die in der .htaccess definiert wurden?

    Vielen Dank im Vorraus
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    Ich weiß nicht wo du das gelesen hast, aber einen Statuscode oder ähnliches kann man an die() nicht anhängen. Lediglich einen String der beim aufrufen von die() angezeigt werden soll kann übergeben werden.

    Fehlerseiten könntest du über die .htaccess definieren sofern der Server das unterstützt.
  4. t*****b


    im Manual findet man, dass man bei Abbruch durch die() einen Fehlercode übergeben kann, wozu ist das gut? Wird dadurch dann ein Fehlercode gesendet?


    Du kannst keine Fehlercode übergeben, du kannst an die die()-Funktion lediglich einen String übergeben, der ausgegeben wird, wenn die Funktion false zurückliefert. Zusätzlich wird das Fortlaufende Script abgebrochen.

    Es ist quasi eine Kurzform für:

    if(!meinefunktion()) {
     echo "Fehler";
     exit();
    }


    Entspricht also:

    meinefunktion() or die("Fehler");


    Das hat aber weder mit Fehlerbehandlung (Exception-Handling) noch mit .htaccess zu tun.

    /Edit:
    Serverseitige Fehlerseiten (404, 403, usw.) haben mit Fehlern in PHP zu tun, sondern mit Fehlern in Apache (Seite nicht gefunden hat nichts mit einem PHP-Script zu tun).

    Beitrag zuletzt geändert: 7.5.2009 11:49:34 von trueweb
  5. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    exit und die sind nur Synonyme...

    Laut Manual:
    <?php
    
    // das Programm normal beenden
    exit;
    exit();
    exit(0);
    
    // das Programm mit einem Fehlercode beenden
    exit(1);
    exit(0376); // oktal
    
    ?>


    Wenn PHP aber auf dem Server läuft, könnte es doch trotzdem noch auf den Apache zurückgreifen, oder?

    @trueweb
    So wie du das gezeigt hast, mache ich das auch bisher, nur hat mich das Manual etwas verwirrt und jetzt dachte ich, dass mit diesen Fehlercodes evtl. auf den Apache zurückgegriffen werden kann.
  6. e********l

    exit(0) macht keinen Sinn. Das müsste sogar einen Fehler erzeugen, weil exit() keinen Parameter erwartet.

    edit(statuscode) kenne ich eigentlich nur aus Java.
    System.exit(0); // alles ok
    System.exit(1); // irgend ein Fehler
  7. t*****b

    zenks schrieb:
    exit und die sind nur Synonyme...

    Laut Manual:
    <?php
    
    // das Programm normal beenden
    exit;
    exit();
    exit(0);
    
    // das Programm mit einem Fehlercode beenden
    exit(1);
    exit(0376); // oktal
    
    ?>



    Das sind von dir selber festgelegte Werte, damit du siehst, welche Stelle in deinem Code einen Fehler verursacht. Sonst hat das keine Bedeutung.


    Wenn PHP aber auf dem Server läuft, könnte es doch trotzdem noch auf den Apache zurückgreifen, oder?


    PHP hat mit Apache garnichts zu tun. Im Webserverbereich ruft zwar der Apache Seiten auf und jagt diesen durch PHP (falls es eine PHP-Datei ist), aber sonst nichts. Du kannst also nicht einfach Apache-Fehler (Seite nicht gefunden o.ä.) mit PHP bearbeiten, du kannst lediglich über .htacess eigene Fehlerseiten definieren.


    @trueweb
    So wie du das gezeigt hast, mache ich das auch bisher, nur hat mich das Manual etwas verwirrt und jetzt dachte ich, dass mit diesen Fehlercodes evtl. auf den Apache zurückgegriffen werden kann.


    Nein, um auf Apache Zugriff zu gelangen, musst du mit .htaccess arbeiten. Du kannst zB über

    ErrorDocument 404 MeineFehlerseite404.php


    in der .htaccess MeineFehlerseite404 aufrufen statt der Standard-Seite.

    Beitrag zuletzt geändert: 7.5.2009 12:54:49 von trueweb
  8. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Wie kann ich anhand eines Fehlerintegers bzw. eines Fehleroktals der nicht ausgegeben wird, debuggen können?

    @evil-evil exit() funktioniert auch nur als exit; aber dennoch, wenn das Manual sagt, dass man Werte übergen kann, muss das doch irgendeinen Sinn haben.

    @trueweb Mir ist schon klar, dass ich per .htaccess Dateien Fehlerdokumente definieren kann... meine Überlegung war jetzt nur wenn ich eine Funktion, vereinfacht:
    function error($bla)
    {
      if(is_int($bla))
      {
        //Würde auf die in der .htacces definierten Errordocumente zurückgreifen
        die($bla);
      }
    }

    nehme, dass ich mir dann die doppelte Fehlerdeklaration spare...

    Wenn ich per PHP den selben Fehler 404 erzeugen will, wie der der von Apache genommen wird
    müsste ich ja dann
    ErrorDocument 404 fehler.php?code=404

    und dann in der fehler.php sowas wie
    <?php
    error($_GET['code']);
    ?>


    Daher meine Überlegung, wenn im Manual steht, dass man einen Fehlercode übergeben kann, dann könnte es doch mgl. sein einen Fehler an den Apache zurückzusenden, der dann die 404 Seite lädt.
  9. e********l

    Die Stelle will ich sehen wo das steht, dass man einen Fehlercode übergeben kann. Zeig mal deine Quelle.

    Um Fehler in PHP zu behandeln gibt es verdammt viele Wege und Möglichkeiten.
  10. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Das hatte ich vorhin ja eigentlich schon mit dem Zitat gezeigt, dann hier die Funktionsbeschreibung.

    Beschreibung
    void exit ([ string $status ] )
    void exit ( int $status )
    
    Beendet die Ausführung des Skripts.


    Man kann also einen Statuscode angeben, nur wird der scheinbar nicht an den Apache gesendet, oder ich weiß nicht wie, deswegen meine Frage wozu der gut sein soll und wenns mgl ist das an den Apache zu senden, wie?

    Beitrag zuletzt geändert: 7.5.2009 13:58:29 von zenks
  11. t*****b

    Was für ein Fehler willst du denn genau abfangen?
  12. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Mein Ziel ist es einfach zur Vereinfachung des Codes mit sowas wie

    die(404);


    auf den Apache Fehler in diesem Fall 404 zurückzugreifen.
  13. e********l

    Das ist ein Zitat, aber das ist keine Quelle....


    .... hab nun mal in die Live Exit Doku geschaut... http://de.php.net/exit

    Ok, es gibt die Möglichkeit einen Statuscode zu senden, der nützt dir aber absolut gar nichts. Er wird ausgegeben und gut ist. Du kannst damit weder den Apache auf irgendetwas hinweisen noch es zum automatischen Debuggen nutzen.

    @404: Das geht nur im Apache abzufangen und nicht in Php.
  14. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    @evil-evil sry, hab ich total vergessen, aber beim ersten Zitat hatte ich die Quelle mit Link angegeben.

    Der integer bzw. die oktalzahl wird eben nicht ausgegeben. Das ist ja gerade das was ich wissen wollte. Wozu ist di gut. Sie wird nicht ausgegeben... wird stattdessen ein Header gesendet? hm werd das mal iwie testen müssen, hab nur heute keine Zeit mehr dazu.

    Das man per PHP nicht zurück auf den Apache zurückgreifen kann find ich schade, aber naja is nunmal so, aber trotzdem würd ich gerne noch wissen, was man mit diesen Fehlercodes anstellen kann ;)
  15. e********l

    Hast du dir die Comments durchgelesen? Wenn du was anderes als 0 übergibst liefert exit() false zurück.

    Das man von Php nicht auf Apache zugreifen kann ist eigentlich logisch, schließlich wird php von Apache ausgeführt und nicht umgekehrt. Klar hat man Zugriff auf die ein oder andere Funktion, aber keinen vollen Zugriff, dafür bedarf es in der Regel spezieller PHP Extensions.
  16. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Ich will ja auch keinen Vollzugriff, ich will ja nur auf die Errordocumente zugreifen. Nun gut. Danke erstmal, das mit dem false wird es wohl sein, ich frag mich aber trotzdem wozu man das dann auch oktal angeben kann. Egal, ich belästige euch jetzt nicht weiter.

    Definitiv, ist meine Überlegung also nicht möglich. Danke erstmal.

    *closed*
  17. e********l

    Setz die Error Documents doch einfach über .htaccess und gut ist. Wenn es dein eigener Server ist, dann kannst du auch für jeden VHost eigene Error Docs setzen.

    @php/warum: Tja, warum funktioniert WSDL bei der einen php version und bei der nächsten nicht? Warum kann php keine Rückgabewerte direkt im Funktionsaufruf nutzen. Warum dürfen Variablen nur per Referenz und nicht direkt von Funktion zu Funktion übergeben werden. Fragen über Fragen die alle den Sinn und Unsinn von Php verdeutlichen ;)
  18. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Irgendwie habe ich das Gefühl nicht verstanden worden zu sein.

    Auch wenn sich meine Idee wohl als falsch erwiesen hat, stell ich sie nochmal kurz vor:

    die Errordocumente werden per .htaccess gesetzt, allerdings will ich z.B. den Fehler 404 auch ab und an über php generieren.
    Daher meine Idee, ich setze eine Funktion "error" welche dann über die() oder exit() auf die per .htaccess definierte Fehlerseite zurückgreift, und falls keine solche vorhanden, die Apache Standard Fehlermeldung ausgibt.

    Nach dem bisherigen System läuft das so, dass per .htaccess der code an eine fehler.php übertragen wird und der dann seinerseits die error()-Funktion aufruft und ich wollte es der übersichtlichkeit halber eben genau andersherum haben.

    Ich hoffe, dass ihr jetzt meine eigentliche Idee verstanden habt ;), aber leider scheint das nicht zu funktionieren :(. Gibt es wirklich keine Funktion die einen Callback an den Apache sendet? Ich meine auf Apache läuft ja auch zum Bleistift mod_rewrite und wenn PHP direkt auf dem Server läuft... ach egal werde mich wohl mit der bisherigen Variante begnügen müssen.

    Danke für eure Unterstützungsversuche

    lg Zenks
  19. e********l

    Achso....dann sag das doch gleich.
    Dann schick einfach entsprechende HTTP Header. Was anderes passiert beim 404 nicht. Schick einen HTTP 404 Status an den Benutzer oder erzeuge eine Pseude 404 Seite. Wenn du weißt, dass eine Seite einen Fehler verursacht, dann kannst du auch die Ausgabe beeinflussen. Dafür brauch man allerdings kein die()/exit()
  20. Autor dieses Themas

    zenks

    zenks hat kostenlosen Webspace.

    Naja, ich hab mich wohl immernoch unklar ausgedrückt :(

    Damit sende ich den 404 Header
    header("HTTP/1.0 404 Not Found");


    mir kommts aber nicht auf den Header an, sondern ich will eine Anfrage via PHP auf das per .htaccess festgeschriebene ErrorDocument leiten, ohne file_get_contents zu benutzen
  21. e********l

    *seufz*
    Mir bleibt zwar weiterhin der Sinn dahinter verschlossen, weil solange sich ein Benutzer in deinem System bewegt und damit über die von dir gesetzten Links etwas ansteuert hast du die Möglichkeit eigene Fehlerseiten anzuzeigen. Sobald er diesen Pfad verlässt und eigene Dateipfade eingibt bewegt er sich direkt auf dem Webserver ohne php zu beachten. Denn zunächst geht die Anfrage an den Webserver. Wenn die Datei existiert und es eine php Datei ist wird der php Interpreter aktiviert und die Datei geparsed und php liefert das Ergebnis an Apache zurück. Dieser liefert die Seite aus und der Benutzer sieht sie. Du kannst faktisch also gar nicht eine bereits geschehene 404 abfangen.
    Was du noch versuchen könntest wäre eine 404.php zu schreiben und die beim Apache zu definieren. In die 404.php kannst ja Logik reinpacken. Ich halte diesen Ansatz - sofern er funktioniert - zwar für "von Hinten durch den Rücken geschossen" aber naja...
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!