OpenX + eAccelerator + mod_fcgi: Internal Server Error

Nach einem Upgrade auf PHP 5.3 mochte der OpenX-Server keine Statistiken mehr anzeigen, sondern führte uns nur noch in einen Internal Server Error (500).

Nach einigen Stunden der Recherche, des Code-Reviewings,… stießen wir dann doch auf die Lösung:
In bestimmten Konstellationen von OpenX, eAccelerator und PHP via CGI existiert ein Bug 🙁

Links

Merkzettel PHP eaccelerator und ioncube_loader

eAccelerator ist erst ab Version 0.9.6.1 zum ioncube_loader kompatibel.
Der ioncube_loader darf dann aber nicht via „extension=ioncube….so“ eingebunden werden (wie im HowTo beschrieben) sondern muss ueber „zend_extension=“/var/lib/php/…./ioncube….so“ in die php.ini eingetragen werden.

TYPO3 Systemextension Extbase und diverse Codebeschleuniger…

Die TYPO3 Systemerweiterung Extbase liest zur Laufzeit PHPDoc Kommentare aus. Was auch immer die Entwickler geritten hat selbst-parsenden Code zu schreiben, es ist auf jedenfall nicht kompatibel zu den ueblichen Beschleunigern und Code-Optimierern.

eAccelerator kann dazu neu kompiliert werden:

./configure --with-eaccelerator-doc-comment-inclusion [...]

eaccelerator best practice

Vernuenftige Einstellungen fuer den eaccelerator in der php.ini

/etc/php5/conf.d/eaccelerator.ini

… sollte enthalten:

zend_extension="/usr/lib/php5/20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="1"
eaccelerator.compress="1"
eaccelerator.compress_level="5"

Wird check_mtime auf 0 gesetzt, beschleunigt der Cache noch deutlich schneller, allerdings finden updates erst mit sehr deutlicher Verzoegerung statt -> nix fuer CMS

eaccelerator update

Wird PHP aktualisiert und ist kein geeignetes re2c (fast nie) verfuegbar, kann in der Regel PHP nicht mehr starten, bzw. verursacht haessliche Fehler.

Abhilfe schafft, den eaccelerator neu zu kompilieren:

/etc/init.d/apache2 stop
kill -9 `pidof php5-cgi`
cd /usr/local/src/eaccelerator-0.9*
make clean
phpize
./configure --enable-eaccelerator --without-eaccelerator-use-inode
make
make install
/etc/init.d/apache2 start