Frage zum Wiki-Artikel „Einen RSS-Feed auslesen“
Olaf Blum
- frage zum wiki
- php
Auf meinem Webserver ist nach Update auf die aktuelle Ubuntu Version PHP 8.3 installiert. Meine RSS-Feed php Scripte funktionieren jetzt nicht mehr. Das Script für selfhtml habe ich probeweise auch angelegt - funktioniert ebenfalls nicht. Siehe sefhtml.php. Gibt es einen Tipp, was an dem Script geändert werden muss, damit es wieder funktioniert)
Moin,
Auf meinem Webserver ist nach Update auf die aktuelle Ubuntu Version PHP 8.3 installiert. Meine RSS-Feed php Scripte funktionieren jetzt nicht mehr. Das Script für selfhtml habe ich probeweise auch angelegt - funktioniert ebenfalls nicht.
Was steht denn im Errorlog (standardmäßig unter /var/log/apache2)? Ich würde mal darauf tippen dass die XML-Erweiterung nicht installiert ist: installiere mal das Paket php8.3-xml.
Gruß
Tobias
Das Paket war installiert, das ist es leider nicht. Im Errorlog steht leider auch nichts - jetzt muss ich mich wohl an den richtigen errorlevel herantasten...
Hallo Olaf Blum,
wenn du das Errorlog nicht findest, schreibe dir ein Script, das phpinfo() aufruft. Da solltest du fündig werden. Lasse das Script nicht auf dem Server, sonst werden interessierte Bösewichte ggf auch fündig.
Alternativ schalte zu Beginn des rss Scripts temporär das Errorlogging hoch.
Hinweise zu deinem Programmcode können wir nur geben wenn wir deinen Code sehen.
Rolf
der Code wie im selfhtml nur jetzt mit dem Versuche den Errorlevel hoch zu setzen:
<?php
// Report all PHP errors
error_reporting(E_ALL);
// Feed-URL des RSS-Feeds
$feed_url = 'https://blog.selfhtml.org/feed/';
// In welcher Datei soll der Cache abgelegt werden?
$feedcache_path = __DIR__.'/feed_cache.html';
// Wie alt in Sekunden darf der Cache sein? (1800 s entsprechen einer halben Stunde)
$feedcache_max_age = 1800;
// Wie viele Einträge sollen angezeigt werden?
$max_entries = 5;
if(!file_exists($feedcache_path) or filemtime($feedcache_path) < (time() - $feedcache_max_age)) {
$xml = simplexml_load_string(file_get_contents($feed_url));
$output = '<p>Die '.(int)$max_entries.' neusten Einträge aus dem <a href="'.htmlspecialchars($xml->channel->link).'">'.htmlspecialchars($xml->channel->title).'</a></p>'.PHP_EOL;
$entries = $xml->channel->item;
$counter = 0;
$output .= '<ul>';
foreach($entries as $root) {
$counter++;
// Ausgabe nach x Einträgen beenden:
if($counter > $max_entries) {
break;
}
$date = date('d.m.Y', strtotime($root->pubDate));
// Anreißertext:
//$description = strip_tags($root->description);
$output .= '<li><a href="'.htmlspecialchars($root->link).'" title="'.htmlspecialchars($date).'">'.htmlspecialchars($root->title).'</a></li>'.PHP_EOL;
}
$output .= '</ul>';
echo $output;
file_put_contents($feedcache_path, $output);
} else {
echo file_get_contents($feedcache_path);
}
?>
Leider finde ich immer noch nichts in den Apache Logs - heute am Abend nochmal ein wenig forschen...
Hallo Olaf Blum,
ich war mit dem PHP Script nicht vertraut.
Nachdem ich versucht habe, es hinter einem Proxy laufen zu lassen und PHP nicht vermitteln konnte, den Proxy sauber zu verwenden (oder eine saubere SSL Verbindung aufzubauen - keine Ahnung), probiere ich das heute abend nochmal.
Rolf
Moin Olaf,
Du kannst das
$xml = simplexml_load_string(file_get_contents($feed_url));
vereinfachen und den Rückgabewert prüfen:
$fileContents = simplexml_load_file($feed_url);
if (FALSE === $fileContents) {
# Fehlerbehandlung
}
else {
# Mit dem SimpleXMLElement weiter arbeiten …
}
Siehe auch:
Viele Grüße
Robert
Hm, es sieht so aus, als ob das Script die aufgerufene Website nicht erreicht. Das ist zwar noch nicht die Lösung, aber ich fürchte jetzt muss ich mir ansehen, was sich an der Server Konfiguration geändert hat - bzw. was da nach dem Update anders läuft - es scheint nicht an den php-Scripten zu liegen. Das hat schon mal geholfen - nun muss ich mich wohl eher mit Ubuntu auseinandersetzen...
Moin Olaf,
Hm, es sieht so aus, als ob das Script die aufgerufene Website nicht erreicht.
vielleicht liegt es am Protokoll? Für HTTPS muss OpenSSL installiert sein.
Viele Grüße
Robert
Leider nein - OpenSSL ist insatlliert undOpenSSL Support ist enabled. Ich bin mir inzwischen sicher, dass es nicht an php oder dem Script liegt - irgendeine Server Konfiguration hat sich beim Update verändert - ich muss das nur noch finden.
Problem ist gelöst - es lag an fehlenden DNS Server Einträgen in /etc/systemd/resolved.conf - so konnte er die aufgerufenen Server einfach nicht finden. Vielen Dank für eure Tipps, die mich auf die Ursache gebracht haben
Update auf die aktuelle Ubuntu Version
Problem ist gelöst - es lag an fehlenden DNS Server Einträgen in /etc/systemd/resolved.conf
Hm. Es kann sein, dass das manuelle Setzen das Problem nur bis zu einem Neustart überlebt. Die DNS-Konfiguration sollte eigentlich bei allen derzeit oft verwendeten Netzwerkkonfigurigurationsmethoden) automatisch (networkmanager, netplan, ifup/ifdown/interfaces) gesetzt werden.
Wie konfigurierst Du Dein Netz?
Grüße aus dem heute verregneten Spanien.