Snoopy und der Refresh-Header

Snoopy pompiereNein, um diesen Snoopy geht es nicht. (Aber ich wollte mal wieder ein Bild einbauen 😉 Sondern um die PHP Klasse mit dem gleichen Namen, die einen Webbrowser in simuliert. Damit kann man z.B. in PHP den Inhalt einer anderen Seite abrufen, ohne sich um die Implementierung zu kümmern. Zusätzlich werden z.B. Weiterleitungen auch verfolgt, und Cookies gesetzt.

Und genau da liegt das Problem: Snoopy beachtet nur die beiden Weiterleitungsheader „Location“ und „URI“. Location ist der quasi-Standard, was anderes habe ich noch nicht gesehen.

Leider musste Netscape mal wieder sein eigenes Süppchen kochen und hat den „Refresh“-Header erfunden. Dieser Header ermöglicht noch ein paar mehr Sachen, wie Verzögerungen, wird aber fast nicht mehr eingesetzt.

Leider verwenden ihn einige Webanwendungen noch, wenn sie auf einem IIS laufen. Dieser hat nämlich in der Version 5.1 ein Problem mit dem Loacation-Header… So eine Anwendung ist der Bugtracker Mantis. Und mein Plugin WP-Mantis benutzt eben Snoopy um die Changelogs und Roadmaps abzurufen. Jetzt hat mich vor einiger Zeit ein Benutzer des IIS angeschrieben, und nach einiger Fehlersuche haben wir dann den Fehler in Snoopy gefunden.

Leider hat sich WordPress geweigert, meinen Fix zu akzeptierten, (Naja, Snoopy ist dort auch veraltet) darum will ich ihn hier noch mal publizieren.

Die Sachen ist ziemlich einfach: Für WordPress muss die wp-includes/class-snoopy.php geändert werden:

Zeile 867 muss so geändert werden:

if(preg_match("/^(Location:|URI:|Refresh:)/i",$currentHeader))

Und Zeile 870 muss wie folgt lauten:

preg_match("/^(Location:|URI:|Refresh:[ ]+[0-9]+;[ ]*url=)[ ]*(.*)/i",chop($currentHeader),$matches);

Wer also WP Mantis auf einem IIS System einsetzt sollte diese Änderung berücksichtigen. So 100%ig sicher bin ich mir bei dem RegEx nicht, er sollte aber funktionieren 😉
Bild © by Gianfranco Goria on Flickr

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert