Zur Navigation

Nach Wordpress-Upgrade keine Feedanzeige mehr im Shop ...? [2]

11 lizzy

Hallo Jörg,

display_errors steht auf on. Wo würden denn PHP-Fehler -sofern vorhanden- ausgegeben werden ... auf der Startseite des Shops? Wenn ja, dann werden in der Tat (leider) keine Fehler produziert.

Der Code der Klasse ist frei verwendbar, wie nachfolgend auch zu lesen ist.
Vielleicht hilft Dein Kennerblick ja weiter ;-) - schon einmal vielen Dank für Deine Mühen!


<?php
/*
class RSSmoosings
Version 0.1 2006-11-15
Copyright by Siegfried Hirsch

Diese Software ist frei verwendbar. Allerdings muss dieses Copyright erhalten bleiben.
Die Software darf sowohl in privaten als auch in kommerziellen Anwendungen genutzt werden.
*/

define('CACHE_CHECK', true);
define('CACHE_TIMEOUT',3600);

class RSSmoosings
{
    // Cache-Verzeichnis eintragen, das beschreibbar sein muss chmod 777
    var $cache                 = 'cache';

    // Die Url des Feeds, zum Beispiel vom rss-blogger
    var $rss_url               = "http://news.google.com/news?ie=UTF-8&oe=utf8&q=kinder+fahrrad+sicherheit&hl=de&output=rss";

    // css class für title formatierung
    var $class_rss_title       = "rsstitle";
    // css class für title formatierung
    var $class_rss_description = "rssdescription";

    // Verfuegbar nach dem Einlesen des Feeds
    var $rss                   = array();
    var $channel               = array();
    var $items                 = array();

    // ============= creates a tree (array) from the given xml data (only for internal use)
    function xml2array($text) {
        $array = array();
        // this only works for rss feeds and maybe for rdf
        $what = "(rss|channel|title|description|item|pubdate|link|content:encoded)";
        $reg_exp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
        $reg_exp = '/<'.$what.'[^>]*>(.*?)<\/\\1>/s';
        preg_match_all($reg_exp, $text, $match);
        foreach ($match[1] as $key=>$val) {
            if ( preg_match($reg_exp, $match[2][$key]) ) {
                $array[$val][] = $this->xml2array($match[2][$key]);
            } else {
                $array[$val] = $match[2][$key];
            }
        }
        return $array;
    }
    function cachecheck()
    {
        $md5 = md5($this->rss_url);
        if (file_exists($this->cache.$md5)) {
            $timestamp = filectime($this->cache.$md5);
            if (mktime() - $timestamp < CACHE_TIMEOUT) {
                $data = @file($this->cache.$md5);
                $data = implode("\n",$data);
                return $data;
            } else
            return "";
        }
    }
    // ============= Fetches the data over http
    function fetch_content() {
        // =========== Fetch the data
        $data="";
        if (CACHE_CHECK) {
            $data = $this->cachecheck();
            // echo "Here comes data: ".$data;
        }
        if (empty($data)){
            $purl = parse_url($this->rss_url);
            $host = $purl['host'];
            $query = $purl['path'] ."?". $purl['query'];
            // echo "host: $host<br>";
            // echo "query: $query<br>";
            // Get data by opening a socket connection.
            $fp = @fsockopen($purl['host'], 80, $errnum, $errstr, 15); // Open a socket connection
            if($fp) {
                $fp_data="GET {$query} HTTP/1.0\r\n";
                $fp_data.="Host: {$purl['host']}\r\n";
                $fp_data.="User-Agent: RSSmoosings\r\n";
                $fp_data.="Connection: Close\r\n\r\n";
                fputs($fp, $fp_data);
                while(!feof($fp)) {
                    $data.=fgets($fp, 8192);
                }

                fclose($fp);
                // now cache
                if (CACHE_CHECK) {
                    $fp = fopen($this->cache.md5($this->rss_url),"w");
                    fputs($fp, $data);
                    fclose($fp);
                }
            } else {
                return false;
            }
        }
        // Clean up the data by removing the http headers
        $data=substr($data, strpos($data, "\r\n\r\n"), strlen($data));

        return $data;
    }

    // get_rss - and translate from xml into php array
    function get_rss($url = "") {
        if (!empty($url)) {
            $this->rss_url = $url;
        }
        $data=$this->fetch_content();	// get the data
        if(!$data) return false;

        // parse the xml file into a php array
        $xml_array=$this->xml2array($data);
        if(!$xml_array) return false;

        if (array_key_exists('channel', $xml_array['rss'][0])) {
            $this->channel = $xml_array['rss'][0]['channel'][0];
        }
        if (array_key_exists('item', $xml_array['rss'][0]['channel'][0])) {
            $this->items = $xml_array['rss'][0]['channel'][0]['item'];
        }
        $this->rss = $xml_array;
        return $xml_array;
    }

    // einfache Funktion zum Ausgeben der Items - siehe Beispiel unten
    function printItems($count = 999, $useDescription = true, $useLink = true, $feed='')
    {
        $i = 1;
        $rss_items = array();
        foreach($this->items as $item) {

            if ($feed == 'google') {
                // für Google Feed
                $description = str_replace('&gt;', '>', $item['description']);
                $description = str_replace('&lt;', '<', $description);
                //$description = str_replace('<a ', '<a target="_blank" ', $description);
                $description = strip_tags($description, '<a>,<br>');
                $description = html_entity_decode($description);

                $preg = '/<a[\s]+[^>]*?href[\s]?=[\s\"\']+(.*?)[\"\']+.*?>([^<]+|.*?)?<\/a>/';
                preg_match_all(trim($preg), $description, $out, PREG_PATTERN_ORDER);

                $url_string = '<a href="javascript:void(null)" onclick="openWin(\'' . $out[1][0] . '\', 800,400)">' . $out[2][0] . '</a>';
                $description = str_replace($out[0][0], $url_string, $description);

                $url_string = '<a href="javascript:void(null)" onclick="openWin(\'' . $out[1][1] . '\',800,400)">' . $out[2][1] . '</a>';
                $description = str_replace($out[0][1], $url_string, $description);
                $description = str_replace('</a><a', '</a>: <a', $description);
                $description = substr($description, 0);
                $rss_items[$i]['description'] = utf8_decode($description);
           
		    } else {
                if (isset($item['title']) && !empty($item['title'])) {
                    $rss_items[$i]['title'] .=  $item['title'];
                }
                if (isset($item['description']) && !empty($item['description'])) {
                    $short_description = str_replace('<![CDATA[', '', $item['description']);
                    $short_description = str_replace(']]', '', $short_description);
                    $short_description = substr($short_description, 0, 412);
                    $rss_items[$i]['short_description'] .=  nl2br($short_description);
                }

                if ($useDescription && isset($item['content:encoded']) && !empty($item['content:encoded'])) {
                    $description = str_replace('<![CDATA[', '', $item['content:encoded']);
                    $description = str_replace(']]', '', $description);
                    $rss_items[$i]['description'] .=  $description;

                    $regexp = '/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'\s>]*)/i';
                    preg_match($regexp, $description, $matches);
                    $size = getimagesize($_SERVER['DOCUMENT_ROOT'] . $matches[1]);
                    $w = 119;
                    $h = $size[1] / $size[0] * 119;
                    $rss_items[$i]['img'] = '<img src="' . $matches[1] .'" width="'.$w.'" height="'.$h.'" />';

                }

                $rss_items[$i]['link'] = $item['link'];
            }
            if ($i++ >= $count) {
                // abbrechen, falls ein count angeben worden ist
                break;
            }
        }
        $i++;
        return $rss_items;
    }

}

?>

30.09.2011 12:10

12 Jörg Kruse

Als erstes würde ich den Inhalt dieses Cache-Verzeichnisses mal löschen, damit Änderungen wie in Beitrag 4 auch wirklich zum Tragen kommen:

    // Cache-Verzeichnis eintragen, das beschreibbar sein muss chmod 777
    var $cache                 = 'cache';

30.09.2011 18:31

13 lizzy

... habe ich jetzt komplett geleert und die Rechte gesetzt ... noch hat sich nichts getan ...

30.09.2011 20:42

14 Jörg Kruse

Ich hab das Zeugs mal kurz getestet.

RSSmoosings kann keinen Weiterleitungen folgen, also muss man bei Weiterleitungen die korrekte Ziel-URL angeben - in deinem Fall mit abschließenden Slash.

RSSmoosings hängt auch bei leerem Query String ein "?" an die URL. Die aktuelle Wordpress Version scheint dies zum Anlass zu nehmen, auf die URL ohne "?" weiterzuleiten. Folglich muss dieser Codeabschnitt ...:

             $query = $purl['path'] ."?". $purl['query'];

... folgendermaßen geändert werden:

             $query = $purl['path'];
             if ($purl['query']) {
                 $query .= "?" . $purl['query'];
             }

Und nach der Änderung sollte noch das Cache-Verzeichnis geleert werden

Abgesehen davon würde ich mich trotzdem beizeiten nach einem Ersatz für diese nicht mehr gepflegte Klasse umsehen. Der nächste Bug ist vielleicht eine Sicherheitslücke, die nicht mehr gestopft wird.

30.09.2011 22:42

15 lizzy

Was für ein Start ins Wochenende - Hey Jörg, Du bist einfach spitze!

Ich hab' die Änderungen gemacht und ... siehe da: Der Feed ist wieder da!
Vielen, vielen Dank!!!

Und natürlich hast Du recht: Die Klasse, sogar das ganze Shopsystem, wird in ein paar Wochen der Vergangenheit angehören. In Kürze erfolgt ein Relaunch/Systemwechsel und dann werden solche Sachen mit aktuelleren Skripts eingebunden.

Vielen Dank nochmal ... ich freue mich auf das nächste Mal hier bei Dir in diesem tollen Forum!

Liebe Grüße und ein sonniges Wo'ende,
Lizzy

01.10.2011 10:46

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]