PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

09-12-2006, 13:51
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
Fehler bei include abfangen, wenn include-Datei fehlerhaft ist
Hallo,
ich habe ein Problem:
PHP4.4 wird genutzt
Ich muss über einen include-Befehl Klassen (als Unterprogramm) einbinden. Manchmal kommt es vor, dass die Funktionen dieser Klasse fehlerhaft sind bzw. der Code nicht in Ordnung ist.
Das Resultat: Mein Hauptprogramm stürzt ebenfalls ab und wird nicht mehr fortgesetzt. Ich bräuchte eine Möglichkeit, das Laden des Unterprogramms zu unterbinden, sofern dieses Fehlerhaft ist.
@include hilft nicht weiter.
Selbst wenn ich mit PHP5 arbeite und try-catch probiere, habe ich das selbe Resultat.
Vielleicht kann mir ja jemand weiter helfen.
Danke
Brit
|

09-12-2006, 14:05
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
file_exists() vorher einbauen?
|

09-12-2006, 14:08
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
file exists
Hab ich, das löst aber das Problem mit dem fehlerhaften Code nicht.
|

09-12-2006, 14:11
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
warum nicht?
Code:
wenn( benötigte dateien existieren )
führe unterprogramm aus
sonst
gibt eine fehlermeldung aus
|

09-12-2006, 14:13
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
Die Datei existiert ja, sie hat "nur" Fehler. Und dieser Fehler veranlaßt mein Hauptprogramm, zu stoppen, ohne auch nur eine Fehlermeldung anzuzeigen.
|

09-12-2006, 14:14
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
kannst du evtl. ein minimales beispiel zusammenschreiben, um zu veranschaulichen, was du meinst?
|

09-12-2006, 14:19
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
PHP-Code:
if ($phpversion == 5)
{
if (file_exists($datei))
{
try
{
@include $datei;
}
catch (Exception $e)
{
$text_modul.="<h1>Daten nicht verfügbar</h1>";
$text_modul.= "Die angeforderten Daten können momentan nicht angezeigt werden.";
$text_modul.= "<p>Bitte kontaktieren Sie Ihren Administrator. <br/>";
$text_modul.= "Email: <a href='mailto:".$admin_mail."'>".$admin_mail."</a></p>";
}
}
}
else
{
if (file_exists($datei) and @include $datei)
...
}
|

09-12-2006, 14:32
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
PHP-Code:
if (file_exists($datei) and @include $datei)
dürfte m.w. sowieso nicht funktionieren.
was steht denn in der datei $datei drin, dass es probleme bereitet?
|

09-12-2006, 14:35
|
Lennie
PHP Senior
|
|
Registriert seit: May 2006
Beiträge: 1.013
|
|
vielleicht achtest du darauf das in jeder datei ein error_reporting gesetzt ist. ansonsten sollte eigentlich ein fehler angezeigt werden.
schau doch mal in der php.ini nach ob da ein error reporting ausgeschaltet ist.
|

09-12-2006, 14:41
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
1. Der Befehl funktioniert, sofern die include-Datei in Ordnung ist.
2. in der include-Datei werden Daten aus einer Datenbank gelesen und aufgelistet und hundert tausende von anderen Aktionen ausgeführt (wäre zu langwierig, das alles zu beschreiben). Letztendlich ist es egal, WAS dort gemacht wird. Ich will ja nur wissen, ob es eine Möglichkeit gibt, den PHP-Interpreter zu überlisten, damit er mein Haupt-Programm weiter laufen läßt.
ganz einfaches Beispiel:
Programm 1:
PHP-Code:
print "Hauptprogramm";
$datei = "unterprogramm.php";
if (file_exists($datei) and @include $datei)
{
print "Unterprogramm geladen";
}
else
{
print "Unterprogramm fehlerhaft";
}
Programm 2:
PHP-Code:
print "Unterprogramm"
Wenn ich das Hauptprogramm starte, bricht es ab, da das Unterprogramm einen Fehler hat (; fehlt).
Wenn ; eingesetzt wird, funktioniert alles.
|

09-12-2006, 14:42
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
Error-reporting ist eingeschaltet. Nur wenn das Unterprogramm eine Klasse ist, kommt kein Fehler.
|

09-12-2006, 14:52
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
den parser kann man eigentlich nicht umgehen, syntaktische fehler sind soweit wichtig, dass man sie nicht einfach ausschalten kann.
vielleicht lässt sich display_errors() vor und nach der ausführung des kritischen blocks irgendwie einsetzen?
|

09-12-2006, 15:01
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
eventuell hilft das weiter:
bool php_check_syntax ( string file_name [, string &error_message] )
For technical reasons, this function is deprecated and removed from PHP. Instead, use php -l somefile.php from the commandline.
aber wie kann es eigentlich passieren, dass das unterprogramm parse-fehler enthält - testest du den code nicht vorher?
|

09-12-2006, 15:03
|
stickyr
Newbie
|
|
Registriert seit: Dec 2006
Beiträge: 9
|
|
Die Funktion gibts erst ab PHP5 und wurde inzwischen schon wieder rausgenommen. Hilft also auch nicht wirklich weiter.
|

09-12-2006, 15:07
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
Instead, use php -l somefile.php from the commandline.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|