24.10.2013

Typo3 und es läuft und läuft und läuft... nicht!

Jedes noch aktive Softwareprojekt bringt irgendwann neue Versionen auf den Markt.
Insbesondere wenn es um Webserver geht, ist es einerseits ganz sinnvoll neue Versionen zu installieren, da sich Sicherheitslücken so schließen lassen und neue Funktionen, oft auch Verbesserungen der Performance erzielen lassen.
Allerdings stellt sich auch immer die Frage, was wird noch funktionieren, nachdem eine Neue Version im Einsatz ist? 
MySQL hat sich nun seit der Version 5 endlich entschieden nur noch korrekte SQL-Queries zu akzeptieren. Das ganze nennt sich dann Strict-Mode und ist durchaus sinnvoll. Jedoch erwartet das auch vernünftigen Code auf Seiten der Anwendungen.
TYPO3 ist so eine Anwendung. Ein Content Management System, also eine Anwendung um Webseiten auf einfache Weise selbst zu pflegen. Dabei ist TYPO3 keineswegs sauber programmiert. Vielmehr ist es grausam.
Nun stellt sich TYPO3 für mich leider als alternativlos dar. Die einzig sinnvolle Möglichkeit ist es, den Datenbank-Server Strict-Mode nur für TYPO3-Verbindungen zu deaktivieren.
In der Vergangenheit habe ich zu diesem Zweck die "setDBinit" Konfiguration von TYPO3 genutzt, die ich mit einer Einstellung wie "SET @@SESSION.sql_mode=MYSQL40;" konfiguriert habe.
Nun hat auch TYPO3 sich in den Versionen weiterentwickelt. Und die Programmierer nutzen auch weiterhin die Konfiguration setDBinit. Wenn Sie jedoch nicht "SET NAMES UFT8" lautet, wird diese schlicht überschrieben. Der Weg ist also nicht mehr praktikabel. Hilfreich ist natürlich, dass dies weder dokumentiert ist noch irgendeine Verbreitung im Internet hat. Vielmehr wird allgemein der o.g. Weg beschrieben.
Nach langer Fehlersuche und sehr viel Kaffee und Cola, habe ich mich dann irgendwann entschieden einen komplett anderen Weg zu gehen. Hier ist der Aufwand sehr minimal:

In der Datei typo3/sysext/core/Classes/Database/DatabaseConnection.php findet sich die Funktion setSqlMode(). 
Gleich zu Beginn der Funktion habe ich 

$resource = $this->sql_query('SET @@SESSION.sql_mode=MYSQL40;');

eingefügt. Damit wird direkt bei einem Datenbank-Connect der Strict-Mode deaktiviert. Sicherlich gefällt es mir nicht Änderungen in den Source-Codes vorzunehmen, jedoch ist das der einfachste und kleinste mögliche Eingriff um die Funktionalität zu erreichen, alle anderen Wege bedeuten noch bedeutend mehr Änderungen.

Keine Kommentare:

Kommentar posten