Liebes Forum
In einem meiner scripte laufen alle Anfragen an das Dateisystem über eine Funktion, die die codierung von Sonderzeichen übernimmt. Das sieht folgendermaßen aus:
function fs() {
$vars = func_get_args();
$func = array_shift($vars);
$vars = myencode($vars);
$ret = call_user_func_array($func,$vars))
$ret = mydecode($ret);
return $ret;
}
myencode() ist dabei die Funktion, die das codieren macht, aber das ist gar nicht das Problem.
Mein Problem besteht darin, daß ich keine Möglichkeit finde, Fehlermeldungen von call_user_func_array() abzufangen. Wenn also eine so aufgerufende Funktion einen Fehler zurückgibt, so kann ich das nicht überprüfen.
Nehmen wir an, ich habe die funktion is_dir().
Dann sieht mein Aufruf so aus: fs("is_dir",$path)
Wenn nun call_user_func_array("is_dir",$path) einen Fehler verursacht (z.B. weil der angegebene Pfad nicht existiert), so hätte ich gerne eine Anzeige, wo in welcher Datei fs() aufgerufen wurde. Also das was seit PHP 5 debug_print_backtrace() macht.
Ich finde aber keine Möglichkeit, herauszufinden, ob call_user_func_array() einen Fehler verursacht hat, oder nicht.
Normalerweise würde ich das so machen:
if (!$ret = call_user_func_array($func,$vars))
trigger_error(debug_print_backtrace(),E_USER_ERROR);
Nur leider kann $ret alle möglichen Werte zu recht haben, ohne das es einen Fehler bedeuteten würde. Wenn also im obrigen Beispiel $path einfach kein Verzeichnis ist, dann wird FALSE zurückgegeben und die Fehlermeldung erzeugt.
Hoffe, jemand hat eine Lösung für dieses Problem.
Grüße
Heizer