Dienstag, 11. September 2007
Als ich noch ein junger, unerfahrener PHP-„Programmierer“ war (ich brauchte das Geld!), kamen ab und zu solche Konstrukte heraus:
$str_next_month = strtotime($arr_date["year"] . "-" . ($arr_date["mon"] + 1) . "-" . "01");
Das Script nimmt in Kauf, dass bei nicht sachgemässer Handhabung der Wert für den Monat auch einmal 13 betragen kann. In PHP4 meckerte strtotime() nicht gross um und rechnete das Datum kommentarlos auf den auf Dezember folgenden Januar um.
Nun, seit kurzem läuft PHP 5.2.2 auf meinem Entwicklungsserver (Liip und Hostpoint haben das ihre dazu beigetragen) – und bisher hielt sich mein Code tapfer. Bis heute abend.
Zu spüren bekam mein Server diese Fehlprogrammierung ausgerechnet in einer schicken while-Schleife (zu meiner Rehabilitierung die einzige in den knapp 1000 Zeilen PHP-Code). 120 Sekunden lang eine CPU-Auslastung von 100% – yippie! Multipliziert mit den Anzahl Versuchen, den Fehler einzugrenzen … Heute wurden einige Elektronen zusätzlich verbraten und Schaltungen überbeansprucht.
Was lernen wir daraus?
- Programmiere keinen Scheiss zusammen! (Y2k reloaded?)
- Wenn du while-Schleifen schon nicht vermeiden kannst, baue wenigstens Sicherungen ein, z.B. ganz stümperhaft in Form eines Counters