php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.09.2010, 12:42  
Neuer Benutzer
 
Registriert seit: 09.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
starwhooper befindet sich auf einem aufstrebenden Ast
starwhooper eine Nachricht über ICQ schicken starwhooper eine Nachricht über Skype™ schicken
Standard Fatal Error nicht in bash durchhreichen

Ich nutze eine API um per PHP 5.2.9 auf ein anderes System zuzugreifen.

Leider hat das auszulesende System oft interne Probleme wodurch die API zusammenbricht, das PHP ein Fatal Error ausgibt und sich beendet.

Um diesen Fehler abzufangen, rufe ich nun mit dem PHP Skript dump.php, per folgenden Code das PHP Skript get.php auf. Sollte die get.php nun einen Fatal Error zurückmelden, wird die get.php einfach erneut ausgeführt.

PHP-Code:
ob_start();
@
passthru('get.php');
$ausgabe=ob_get_contents();
ob_end_clean();
if (
strpos($ausgabe,'Fatal error:') == null){
...
möglichkeit1...
}
else {
...
möglichkeit2...

Technisch läuft das ganze nun einwandfrei, allerdings wird bei Auftreten des Fatal Errors, dieser von der dump.php nicht nur in der Möglichkeit2 verarbeitet, sondern der Fatal Error auch in der Bash Konsole ausgegeben.

Da ich andere Informationen in der Konsole ausgegeben haben möchte, ist hier das grundsätzliche Unterdrückung/Verwerfen von Ausgaben nicht anwendbar.

Wie kann ich dieses Durchreichen des Fatal Errors in der dump.php unterdrücken
__________________
Gruß, Thiemo
PHP, MySQL und MediaWiki sind meine liebsten virtuellen Werkzeuge.
starwhooper ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.09.2010, 13:29  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Ein fatal error bricht das Skript ab, du musst in dem Fall also auf register_shutdown_function zurückgreifen, die shutdown function wird auch bei Abbruch mit Fehler ausgeführt, dort kannst du also noch prüfen, ob ein Fatal error aufgetreten ist.
Alternativ kannst du natürlich für die Produktivumgegubng alle Fehlerausgaben unterdrücken:
PHP-Code:
ini_set('display_errors',0); 
bzw. direkt in der php.ini oder als Parameter
Code:
php -d display_errors=0 -f get.php
Edit: ich beziehe mich hier natürlich auf eine Prüfung innerhalb von get.php, das Durchreichen der Information, ob ein Fehler aufgetreten ist lässt sich z.B. mit exit status realisieren
PHP-Code:
//in shutdown function von get.php 
    
$error error_get_last();
    if (
$error['type'] & (E_ERROR E_CORE_ERROR E_COMPILE_ERROR)) {
        exit(
1);
    } else {
        exit(
0);
    } 
PHP-Code:
//in dump.php
    
@passthru('get.php',$status);
    if(
$status==1) {
        
// Fehler
    
else {
        
// kein Fehler
    


Geändert von fab (30.09.2010 um 13:37 Uhr).
fab ist offline   Mit Zitat antworten
Alt 04.10.2010, 12:41  
Neuer Benutzer
 
Registriert seit: 09.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
starwhooper befindet sich auf einem aufstrebenden Ast
starwhooper eine Nachricht über ICQ schicken starwhooper eine Nachricht über Skype™ schicken
Standard

Das Problem ist ja nicht, das die get.php einen Fatal Error meldet. Das Ärgernis liegt darin, das das die Datei dump.php diese nicht nur zu verarbeiten sondern auch einfach an die Konsole ausgibt.

Diese Ausgabe stört mich.
__________________
Gruß, Thiemo
PHP, MySQL und MediaWiki sind meine liebsten virtuellen Werkzeuge.
starwhooper ist offline   Mit Zitat antworten
Alt 04.10.2010, 15:39  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Okay, wie du den Fatal Error letztendlich verarbeitest, ist deine Sache aber mein Hinweis zur display_errors Direktive zur Laufzeit von get.php hilft dir genau bei diesem Problem.
fab ist offline   Mit Zitat antworten
Alt 14.10.2010, 10:58  
Neuer Benutzer
 
Registriert seit: 09.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
starwhooper befindet sich auf einem aufstrebenden Ast
starwhooper eine Nachricht über ICQ schicken starwhooper eine Nachricht über Skype™ schicken
Standard

Hi, wir sind noch nicht so ganz auf dem gleichen Nenner

Der E_ERROR, der die get.php zum Absturz bringt, wird von der dump.php erkannt und entsprechend verarbeitet. Das seltsame Problem dabei ist nur, das die dump.php den Fatal Error auch nach oben weiterreicht.

__________________
Gruß, Thiemo
PHP, MySQL und MediaWiki sind meine liebsten virtuellen Werkzeuge.
starwhooper ist offline   Mit Zitat antworten
Alt 14.10.2010, 11:31  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von starwhooper Beitrag anzeigen
Der E_ERROR, der die get.php zum Absturz bringt, wird von der dump.php erkannt und entsprechend verarbeitet. Das seltsame Problem dabei ist nur, das die dump.php den Fatal Error auch nach oben weiterreicht.
Das ist für mich ein Widerspruch.

Zitat:
wir sind noch nicht so ganz auf dem gleichen Nenner
Da reih ich mich ein

Wie sieht deine API aus, ist das eine Benutzerklasse, die du verwendest, ein Webservice (wohl eher nicht), ...?
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online   Mit Zitat antworten
Alt 14.10.2010, 13:16  
Neuer Benutzer
 
Registriert seit: 09.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
starwhooper befindet sich auf einem aufstrebenden Ast
starwhooper eine Nachricht über ICQ schicken starwhooper eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Das ist für mich ein Widerspruch.


Da reih ich mich ein

Wie sieht deine API aus, ist das eine Benutzerklasse, die du verwendest, ein Webservice (wohl eher nicht), ...?
In wie fern ein Widerspruch ? Die dump.php zieht sich per ob_get_contents() ob es zu einem Fatal Error in der get.php kam oder nicht. Wenn ja, passiert A wenn nein passiert B.
Seltsamerweise gibt die dump.php den Fatal Error aber auch aus.

Deine Frage kann ich leider nicht beantworten. Ich habe diese API hierher: http://php-arapi.sourceforge.net/index.html
__________________
Gruß, Thiemo
PHP, MySQL und MediaWiki sind meine liebsten virtuellen Werkzeuge.
starwhooper ist offline   Mit Zitat antworten
Alt 16.10.2010, 12:18  
Erfahrener Benutzer
 
Benutzerbild von Screeze
 
Registriert seit: 04.01.2009
Beiträge: 844
PHP-Kenntnisse:
Fortgeschritten
Screeze wird schon bald berühmt werden
Standard

Code:
@passthru('get.php');
http://php.net/manual/de/function.passthru.php
Zitat:
passthru — Führt ein externes Programm aus und zeigt dessen Ausgabe an
Was erwartest du?
__________________
Develovision Blog
Screeze ist offline   Mit Zitat antworten
Alt 17.10.2010, 10:39  
Neuer Benutzer
 
Registriert seit: 09.11.2009
Beiträge: 10
PHP-Kenntnisse:
Fortgeschritten
starwhooper befindet sich auf einem aufstrebenden Ast
starwhooper eine Nachricht über ICQ schicken starwhooper eine Nachricht über Skype™ schicken
Standard

Aber die Ausgabe sollte doch durch ob_start abgefangen werden. Mit exec oder system anstatt passthru kommt es auch nicht zu einer anderen Reaktion.
PHP-Code:
ob_start(); 
@
passthru('get.php');
$ausgabe=ob_get_contents();
ob_end_clean(); 
__________________
Gruß, Thiemo
PHP, MySQL und MediaWiki sind meine liebsten virtuellen Werkzeuge.
starwhooper ist offline   Mit Zitat antworten
Alt 17.10.2010, 14:14  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wieso benutzt DU nicht include, wenn es sich um eine PHP-Datei handelt?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Swiftmailer Fatal Errors sinnvoll!? d0ne PHP-Fortgeschrittene 2 21.04.2010 16:44
[Erledigt] Fatal Error und der Skriptabbruch peaceman PHP-Fortgeschrittene 15 14.04.2010 14:27
[Erledigt] Verarbeiten eines Fatal Error starwhooper PHP Tipps 2009 10 12.11.2009 14:54
require und redeclare | fatal error Chestarbargel PHP Tipps 2009 8 07.05.2009 11:35
Merkwürdigkeit bei svn-Zugriff aus Bash heraus arkascha Server, Hosting und Workstations 0 25.04.2005 20:23
Fatal error: Allowed memory size of 8192 bytes exhausted at PHP Tipps 2005 11 06.03.2005 19:26
Fatal error: Call to undefined function: imagecreatefromjpeg DannyD PHP-Fortgeschrittene 10 05.12.2004 21:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
bash fehlerausgabe unterdrücken, php fatal error durchreichen, bash abbruch bei fehler, bash abbruch, bash script kein abbruch wenn fehler, php passthru ausgabe unterdrücken, bash error unterdrücken, bash fehler nicht ausgeben, bash fehlercodes unterdrücken, php mget per passthru, php ob_get_contents memory fatal, errors in bash shell nicht ausgeben, php passthrouh svn errors, bash error um, linux shell php fehler unterdrücken, bash error, wodurch können dump fehler auftreten, skype meldet fatal error beim starten, bash fehler unterdrücken, php passthru abbrechen wenn fehler

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum