Warum?
Kann mir jemand den Gedanken hinter folgendem Verhalten von XML_RPC erklären?
Ich bin dabei, einige XML-RPC Webservices in PHP zu programmieren. Leider gabs immer eine Fehlermeldung wenn ich eine bestimmte Funktion aufrufe.
Zuerst suchte ich den Fehler in der Funktion beim XML-RPC-Server. Jedoch funktionierte die problemlos. Danach habe ich eine Ewigkeit mit den via XML-RPC übergebenen Parameter herumgespielt, hat jedoch nichts gebracht.
Dann habe ich in der XML-RPC-Klasse das Debug-Flag aktiviert. So konnte ich herausfinden, dass der XML-RPC-Server die Ausgabewerte der Funktionen übergibt, was ja auch so sein muss. Das Debug-Flag machte auch, dass im XML-RPC-Client die empfangenen XML-Daten ausgegeben werden. Diese entsprachen den vom Server gesendeten. Doch leider gab mir das Debug-Flag keine Information warum das Parsen der XML-Daten fehlschlug.
So habe ich mir mal den Code der XML-RPC-Klasse angeschaut und habe dort eine Funktion error_log entdeckt. Diese Funktion ist in PHP eingebaut und sendet eine Fehlermeldung. Nach dem Studium der Dokumentation habe ich herausgefunden, dass die Fehlermeldungen damit in den Error-Log vom Apache geschrieben werden!
Also habe ich mir /var/log/apache2/error_log vorgenommen. Darin fand ich Fehlermeldungen des XML-Parsers, der sich über ein invalid token beschwerte!
Nach längerem Herumexperimentieren mit den Eingabewerten, fand ich heraus, dass der XML-Parser an einem nicht enkodierten Umlaut scheiterte.
Da ich Umlaute nicht mehr enkodiere, sondern einfach das entsprechende encoding="iso-8859-15" Attribut setzte, kontrollierte ich zuerst den XML-Header, wie er von der XML-RPC-Klasse generiert wird. Dort fand ich dann auch den Fehler: es wird kein encoding Attribut erzeugt.
Warum werden nicht alle Umlaute etc. automatisch enkodiert, wenn kein encoding Attribut mitgeliefert wird?
Warum gibt es ein Debug-Flag, aber Fehlermeldungen werden trotzdem nicht ausgegeben sondern weiterhin nur nach /var/log/apache2/error_log geschrieben?