Schreibmaschine mit memory_limit

Normalerweise sitze ich nicht um 1:20 Uhr noch am Rechner, um PHP-Probleme zu debuggen. Insbesondere nicht, wenn’s keine bezahlte Auftragsarbeit ist, sondern nacktes „Ich! Will! Das! Verstehen!“. Aber genau sowas hatte ich heute. Nachdem ich vor einigen Tagen schon mal ergebnislos an dem folgenden Problem herumgedoktert hatte, habe ich mich heute nochmal darin verbissen.

Ein User betreibt einen Magento-Shop auf unserer Hosting-Plattform Uberspace.de. Dazu gehören auch einige Hintergrundjobs, und zwar unter anderem dieser hier, der ganz offenkundig am memory_limit

Mal eben schnell MySQL-Zeichensatzprobleme fixen

Heute lag eine Anfrage einer Kundin auf meinem Tisch, die eine Datenbank voller MySQL-Tabellen hatte. Der Zeichensatz der Datenbank und aller Tabellen und Spalten war latin1_german_ci. Dumm nur, dass die Applikation überall UTF8-kodierte Werte reingeschrieben hat – was hier und da so ein bisschen funktionierte, an anderen Stellen aber so gar nicht. In phpMyAdmin wurden alle Umlaute aber fehlerhaft dargestellt, und damit stand dann auch fest, dass da einfach Murks passiert war (denn wir wissen ja, phpMyAdmin hat immer …

Endlich verstehen: Unicode mit PHP5 und MySQL

Wenn es um PHP und Unicode geht, am Besten auch noch in Zusammenhang mit MySQL, gibt es eine Vielzahl an Tipps und Howtos. Manche davon sind falsch, die meisten zum Glück zwar richtig, doch selbst die, die Richtiges vermitteln, tun das manchmal nur durch Zufall, und oftmals fehlt das, was für eine verlässliche Handhabung am wichtigsten ist: Eine Erklärung, warum man dieses und jenes so und nicht anders machen soll.

Dieser Artikel hat den hehren Anspruch, Erklärungen zu liefern, Verständnis …

I/O-Lastprobleme durch Logging

Ein Kundenserver machte Ärger. Dass bei einem iowait-Wert von konstant über 90% nicht mehr viel zu wollen ist, dürfte klar sein. Die Maschine ist aber nicht grundsätzlich überlastet: Die Tage davor schnurrte sie noch wie ein Kätzchen.

Mittels iostat war schnell herausgefunden, dass die I/O-Last nicht auf einen Plattendefekt o.ä. zurückzuführen war, sondern wirklich tonnenweise Daten auf die Platten geschrieben wurden.

Leider sind solche Probleme oft schwierig zu analysieren, weil es für I/O-Last im Standard-Linux-Kernel kein Accounting gibt – sprich, …

SCRIPT_NAME unter PHP+FastCGI

Auf mehreren Kundenservern setzen wir aus Sicherheitsgründen PHP unter FastCGI in Kombination mit suEXEC ein, in Anlehnung an diese Doku. Das läuft auch weitestgehend unproblematisch, allerdings stehen SCRIPT_NAME und SCRIPT_FILENAME in diesem Fall nicht auf dem Namen des PHP-Scripts, sondern auf dem des PHP-Interpreters, was einige PHP-Scripts etwas durcheinanderbringt.

Für diejenigen, die das für Bug #19656 halten: Nö. Viel simpler ist es mit dem Aktivieren von cgi.fix_pathinfo in der php.ini gemacht.

vorher:

_SERVER["SCRIPT_FILENAME"] = /var/www/virtual/site174/fcgi-bin/php4-fcgi-starter
_SERVER["SCRIPT_NAME"] = /fcgi-bin/php4-fcgi-starter

nachher:…