Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Sigma und PHP5 Problem?

Ich hoffe ich bin hier richtig gestrandet ;)

Also, hier erst ein mal ein paar Daten meines aufgesetzen Servers:
PHP Version 5.2.1-0.dotdeb.1
Mysql 4.1.15
PEAR PHP ( HTML_Template_Sigma ) 1.1.5


Nun zu meinem Problem. Ich habe vor kurzem gemerkt, wie wichtig doch Templates sein können. Macht alles viel übersichtlicher und man muss nicht einen ellen langen Code schreiben. Da habe ich mir folgenden Code ausgedacht:

Code:                   In Zwischenablage kopieren (nur IE)
1">

diesen und so ein ähnlichen Code benutze ich auch für eine andere Seite. Diese Seite funktioniert auch nicht mehr. Ich bekomme als Fehler folgendes angezeigt:

"Catchable fatal error: Object of class PEAR_Error could not be converted to string in /usr/share/php4/HTML/Template/Sigma.php on line 495"


Ich habe sämtliche Foren schon mit dieser Meldung durchgeschaut,.. leider ohne Erfolg. Ich nehme an, dass es an der PHP Version vielleicht liegen könnte. Aber als kleiner Anfänger weiss ich das nicht so genau.

Vielen Dank schon mal für eure Hilfe
Hier gehts zum Orginal Eintrag "Sigma und PHP5 Problem?" im Forum

Antworten

hmm... kann keiner was mit der Fehlermeldung anfangen?


2.

Der Fehler tritt ja in Sigma Template Engine auf. Als erstes solltest du herausfinden, welche Methode von HTML_Template_Sigma du wo aufgerufen hast um den Fehler zu bekommen. Das machst du so:

Standard-Antwort:
Richtig debuggen
1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
3. An den Anfang des Scriptes schreibt man die Zeile: error_reporting(E_ALL);
4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
5. Schritt 4 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt.


3.

Ich denke da gibt es nicht viel zu debuggen, da das Sigma Script aus irgendwelchen Gründen nicht richtig Interpretiert werden kann. Danke für deine Antwort,... ich werde das direkt ausprobieren.

Als Anhang noch, was in der besagten Zeile passiert.
Code:                   In Zwischenablage kopieren (nur IE)
2">

dazu steht ein paar zeilen drunter der Aufruf:
Code:                   In Zwischenablage kopieren (nur IE)
3">




4.

Hier knallt das Ding. Der will das return ausführen:
Code:                   In Zwischenablage kopieren (nur IE)
4">

Jetzt müsste ich schauen wieso gerade im Objekt die Exception nicht geworfen werden kann.... Ich bleib bei der Meinung, dass es ein Problem meiner Version gibt. Oder ich habe etwas nicht richtig eingestellt.


5.

raiseError finde ich in dem Objekt nicht.... jetzt bin ich wirklich ratlos!!!
Es ist nirgends definiert


6.

Das Ding erbt nicht zufällig von einer Oberklasse. Sieht sehr nach ner Methode aus, die PEAR direkt anbietet.


7.

Doch na klar... wie recht du hast. Ist geerbt von PEAR.
hmmm.... ich schau mal direkt weiter.


8.

Habe wieder einen anhaltspunkt....

nach dem return knallts, vorher wird das objekt noch erzeugt (GANZ UNTEN IM CODE):
Code:                   In Zwischenablage kopieren (nur IE)
5">




9.

Das Problem liegt einfach daran, dass $a ein zur Laufzeit erstelltes Objekt ist. das kann natürlich nicht als string ausgegeben werden. Jetzt sitz ich da und überleg mir grad, dass solch ein Problem erst gar nicht geben müsste. Ich mache ja nix falsch. Ich bin schon den ganzen Tag am Debuggen. Hat jemand vielleicht ne Idee?


10.

HTML_Template_Sigma::show() erwartet einen Parameter; das steht in der Definition "function show($block = '__global__')". Wenn die Funktion ohne Parameter aufgerufen wird, dann wird die Zeichenkette '__global__' als Parameter angenommen; dazu dient " = '__global__' " in der Prameterdefinition.

Mittels "$tpl->show();" rufst du HTML_Template_Sigma::show() ohne Parameter auf, es wird daher "print $this->get('__global__')" ausgeführt, wobei $this ein Objekt der Klasse HTML_Template_Sigma ist.

Am Anfang von HTML_Template_Sigma::get() wird mittels "if (!isset($this->_blocks[$block]))" geprüft, ob der entsprechende Block fehlt. Dieser Test liefert TRUE, also wird über "return $this->raiseError()" die Methode "PEAR::raiseError()" aufgerufen und dessen Ergebnis zurückgeliefert.

Der Name 'raiseError' impliziert, das ein Fehler aufgetreten ist. Dein Bemühungen, den Fehler zu finden, sollten sich jetzt nicht auf die Klasse PEAR ausdehnen, sondern du solltest untersuchen, warum der Fehler aufgetreten ist: nämlich weil HTML_Template_Sigma::_blocks['__global__'] nicht definiert ist. Das wundert mich etwas, da die Dokumentation von HTML_Template_Sigma behauptet:
Code:                   In Zwischenablage kopieren (nur IE)
6">

Die einzige Erklährung die ich anbieten kann ist, daß beim Laden des Templates mittels HTML_Template_Sigma::loadTemplatefile() ein Fehler aufgetreten ist. Oh Wunder: diese Funktion liefert SIGMA_OK bei Erfolg und ein Fehlerobjekt falls ein Fehler auftritt (Guckst du in Doku). Was liefert die Funktion bei dir?


11.

ok...
musste feststellen, dass es am Pfad im Konstruktor gelegen hat. Er hat das Template nicht laden können... trotz alldem muss ich ein wenig meckern was die Fehlermeldung angeht: Das sieht mir nicht nach einer normalen Exception aus.

Ich danke dir!
Hast ein gut ;)


12.

Zitat:
Misek postete
Das sieht mir nicht nach einer normalen Exception aus.
Das ist auch keine Exception. Exceptions werden erst ab PHP5 unterstützt, PEAR versucht allerdings kompatibel zu PHP4 zu sein. In PHP4 werden Fehler in einer Funktion über den Rückgabewert der Funktion gemeldet. Nur in Tutorials wird darauf verzichtet, den Rückgabewert zu überprüfen. In echtem Code sollte man immer prüfen, ob der Aufruf, den man getätigt hat, geglückt ist.

Der Vorteil von Exceptions ist, daß man die Fehlerbehandlung gefahrlos und mühelos höher im Aufrufstapel ansiedeln kann.


13.

Also soweit ich weiss habe ich auch PHP5 drauf (siehe oben bei der Problembeschreibung).
Aber ok... ich komme ja nicht aus der Webentwicklung ;)) mir sind solche Fehlerbehandlungen fremd.

Ab jetzt werde ich jeden Rückgabewert überprüfen


14.

Zitat:
Misek postete
Also soweit ich weiss habe ich auch PHP5 drauf
Solange PEAR keine Exceptions wirft ist es egal welche Version du hast.


15.

es funktioniert auf jeden Fall und ich bin glücklich.... ist in meinen Augen nicht schön zu Coden, aber ist Geschmackssache.

wer weiss was die Entwicklung noch so bringt.


Hier gehts zum Orginal Eintrag "Sigma und PHP5 Problem?" im Forum
 
phpforum.de | Impressum | Handy Bundles