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.