Problem mit TYPO3 4.0.4 und PHP 5.2.x und Lösung

Wie die Erfahrung lehrt, tauchen bei PHP immer wieder seltsame undokumentierte Fehler auf, die ein bestimmtes Minor Release betreffen. So wieder einmal geschehen bei meinem ersten Ansatz, Typo3 auf meinem Entwicklungsrechner zu installieren.

Aber der Reihe nach. Der Einfachheit halber entschied ich mich für YAML für TYPO3, um schnell und ohne große Mühe eine vorgefertigte Seitenstruktur zu erhalten, die ich als Ausgangsbasis für meine Privathomepage benutzen konnte. Dessen Installation sowie die der Extensions, die ich vorderhand für eine schicke Ajax-Bildergalerie benutzen wollte (ce_gallery, dam, dam_catedit, dam_file und ameos_dragndropupload), lief auch problemlos ab. Schien ja eine feine Sache zu sein! Doch beim ersten Hineinfummeln in dam kam gleich die Ernüchterung. Der Aufruf von Media / Datei im Typo3-Backend lieferte diese “hübsche” Fehlermeldung:

Fatal error: Cannot re-assign $this in /home/user/public_html/typo3/typo3conf/
ext/static_info_tables/class.tx_staticinfotables_syslanguage.php on line 43

Nun war für mich als Typo3-Anfänger erstmal guter Rat teuer! Was kann das sein? Vielleicht braucht man eine neuere Version der Extension static_info_tables? Mit der scheint es ja irgendwas zu tun zu haben. Aber leider gibt’s keine neuere Version. Es muß wohl an was anderem liegen.

Irgendwo in den Tiefen des Web fand ich dann eine vage Vermutung, daß der Fehler mit PHP 5.2 zu tun haben könnte. Solche Sachen kamen mir irgendwie bekannt vor. Also wurde die bei mir vorhandene PHP-Version 5.2.4 kurzerhand mittels

~$ apt-get remove php5

entfernt und unter http://museum.php.net/php5/php-5.1.6.tar.bz2 die Version 5.1.6 heruntergeladen. Leider sind in den offiziellen Debian-Repositories keine fertig kompilierten Pakete für diese “museumsreife” Version mehr vorhanden, also muß mal wieder selber kompiliert werden.

Dazu werden vorher gegebenenfalls noch ein paar zusätzliche Pakete benötigt:

~$ apt-get install flex libxml2-dev libmysqlclient15-dev \
libpng3 libpng3-dev libjpeg62 libjpeg62-dev \
libgmp3c2 libgmp3-dev libmcrypt4 libmcrypt-dev \
libreadline5 libreadline5-dev

Dann wird das Quellcodepaket von PHP 5.1.6 entpackt, in das entstandene Verzeichnis gewechselt und dort das configure-Skript mit einer Reihe von Parametern aufgerufen:

~$ ./configure --with-apxs2=/usr/bin/apxs2 --with-dom --with-ftp \
--with-gettext --with-gmp --with-mcal \
--with-mcrypt --with-mysql --with-readline \
--with-ttf --with-xml --with-zlib=yes \
--with-gd --with-openssl --with-iconv \
--with-soap --with-pear --disable-debug \
--enable-bcmath --enable-calendar --enable-ctype \
--enable-dbase --enable-discard-path --enable-exif \
--enable-filepro --enable-force-cgi-redirect --enable-ftp \
--enable-gd-imgstrttf --enable-gd-native-ttf --enable-inline-optimization \
--enable-magic-quotes --enable-mbstr-enc-trans --enable-mbstring \
--enable-mbregex --enable-memory-limit --enable-safe-mode \
--enable-shmop --enable-sigchild --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-track-vars \
--enable-trans-sid --enable-versioning --enable-wddx \
--enable-yp

Es folgt der Compilerlauf:

~$ make

Danach könnte das neu kompilierte PHP 5.1.6 mittels

~$ make install

installiert werden. Allerdings an der Debian-Paketverwaltung “vorbei”. Da ich jedoch Wert auf ein gepflegtes System lege, bei dem sich alle Pakete jederzeit wieder sauber deinstallieren lassen, verwende ich zum Installieren von selbstkompilierter Software stets das Programm checkinstall. Dieses wird gegebenenfalls installiert:

~$ apt-get install checkinstall

checkinstall erstellt aus den kompilierten Binaries zunächst ein Debian-Paket (in diesem Fall namens php_5.1.6-1_i386.deb) und installiert dieses danach mittels dpkg. Der Aufruf dazu lautet einfach:

~$ checkinstall make install

Dieses Paket läßt sich dann, falls man es jemals wieder loswerden möchte, einfach mit:

~$ dpkg -r php

sauber deinstallieren.

Weitere Informationen zu checkinstall finden sich auf der Projekthomepage:
http://www.asic-linux.com.mx/~izto/checkinstall/
und in Linuxwiki:
http://linuxwiki.de/CheckInstall

Wenn soweit alles geklappt hat, wird der Apache neugestartet:

~$ /etc/init.d/apache2 restart

Dabei kann es noch zu folgendem Fehler kommen:

apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..

Dann muß in /etc/apache2/httpd.conf folgender Eintrag vorgenommen werden:

<IfModule mod_php5.c>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

Nun nochmals ein Apache-Neustart:

~$ /etc/init.d/apache2 restart

Jetzt sollte alles wie gewünscht laufen – der Fehler im Typo3-Backend ist weg, und der Konfiguration der schicken Ajax-Bildergalerie steht nichts mehr im Wege.

Natürlich ist so ein Downgrade nicht gerade eine sehr elegante Angelegenheit. Besonders unschön finde ich, daß die seit PHP 5.2.0 vorhendene JSON-Funktionalität (JavaScript Object Notation; diese wandelt PHP-Arrays in Transportstrings um, die bei einem Ajax-Request auf der aufrufenden Seite mittels Javascript in Objekte “dekodiert” werden können, siehe http://www.json.org/) damit futsch ist. Tja … das sind halt so die Kompromisse, die man manchmal eingehen muß … Hauptsache ist, daß ich jetzt mit Typo3 weiterfrickeln kann :)

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 3) Comment post

Comments

Charissa 15.12.2013 5:08
avatar

I am extremely impressed with your writing skills as well as with the layout on your weblog. Is this a paid theme or did you customize it yourself? Either way keep up the excellent quality writing, it is rare to see a nice blog like this one today.

My site; attract women

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image

Comment post