T3: tw_rssfeeds reloaded

Bereits früher habe ich Verbesserungen für diese TYPO3-Extension erläutert (https://gebloggt.ch/?p=368). Nun wurde die Extension völlig „nutzlos“, da mit ausgeschaltetem allow_url_fopen von PHP nichts mehr funktionierte.

Ich zitere das problematische Stück code aus der Datei pi1/class.tx_twrssfeeds_pi1.php:

function xml_file($file) {
if (!($fp = @fopen($file, „r“)))
$this->error(„Kann XML-Datei <b>“.$file.“</b> nicht öffnen“);

while ($data = fread($fp, 4096)) {
if (!(xml_parse($this->parser, $data)))
$this->error(„XML-Output: „.xml_error_string(xml_get_error_code($this->parser)));
}

xml_parser_free($this->parser);
}

Natürlich geht das mit der erwähnten PHP-Option nicht. Verbessert (ich weiss, wieder etwas workaround-mässig):

function xml_file($file) {
require_once(„HTTPRequest.php“);
$httpReq = new HTTPRequest($file);
$data = $httpReq->DownloadToString();

if (!(xml_parse($this->parser, $data))) {
$this->error(„XML-Output: „.xml_error_string(xml_get_error_code($this->parser)));
}

xml_parser_free($this->parser);

}

Die Klasse HTTPRequest.php ist etwas ähnliches wie die entsprechende PEAR-Klasse, jedoch etwas einfacher zu benutzen. Und man kann damit den Inhalt externer URLs abrufen, ohne dass allow_url_fopen auf true gesetzt sein muss. Quelle der Klasse: http://www.php-resource.de/forum/showthread/t-65376.html

Ich hab die Klasse auch schon bei anderen Applikationen gebraucht, um externe Files mit PHP zu öffnen. Hat bisher sehr gut funktioniert. Für eine schöne Lösung müsste man dies ev. in die Extension einbauen, da so eine externe Datei nicht so elegant ist.

Ausserdem hat der im Beitrag zitierte Code noch einen kleinen Bug. Die Variable response (in der Funktion DownlaodToString() wurde nicht deklariert und initialisiert. Das

$response.= fread(…)

erzeugt dadurch einen Notice von PHP.

Also kurz:

  1. pi1/class.tx_twrssfeeds_pi1.php anpassen, hochladen
  2. HTTPRequest.php erstellen und ins selbe Verzeichnis hochladen (ggf. $response noch deklarieren).

Damit sollte die Extension wieder funktionieren. Bei mir läuft die Sache prima.

Schreibe einen Kommentar

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