Olaf Blum: Frage zum Wiki-Artikel „Einen RSS-Feed auslesen“

problematische Seite

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)

  1. problematische Seite

    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

    1. problematische Seite

      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...

  2. problematische Seite

    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

    --
    sumpsi - posui - obstruxi
    1. problematische Seite

      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...

      1. problematische Seite

        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

        --
        sumpsi - posui - obstruxi
      2. problematische Seite

        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

        1. problematische Seite

          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...

          1. problematische Seite

            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

            1. problematische Seite

              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.

              1. problematische Seite

                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

                1. problematische Seite

                  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.