foreach - Schleifen und arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von h3ll Beitrag anzeigen
    Alles älter als PHP 5.3 sollte nicht mehr verwendet werden, da dafür keine Sicherheitsupdates mehr erscheinen und du somit ein unsicheres System hast.
    Beim Webspace habe ich aber einige bei, die noch bei PHP Version 5.2 sind, so bei Strato, all-inkl und noch bei einem anderen Hoster. Könnte mir vorstellen, dass es nicht nur mir so geht.

    Kommentar


    • #17
      Zitat von Melewo Beitrag anzeigen
      Beim Webspace habe ich aber einige bei, die noch bei PHP Version 5.2 sind, so bei Strato, all-inkl und noch bei einem anderen Hoster. Könnte mir vorstellen, dass es nicht nur mir so geht.
      Strato setzt auf PHP 5.3 (Zitat zu PHP 5.2: "Alle Bestandskunden die diese Version nutzen werden sukzessive auf PHP 5.3.x umgestellt"). Also Neukunden bekommen 5.3. Nur einige Bestandskunden gammeln noch mit der veralteten Version herum (vermutlich aus Faulheit oder Desinteresse).

      All-inkl unterstützt sogar PHP 5.4.

      Also die Hoster als Ausrede zu verwenden ist ganz billig. Wenn man wirklich einen Hoster haben sollte, der keine zeitgemäße PHP-Version anbietet, dann ist das höchstens ein Grund zum Wechseln.
      Zuletzt geändert von h3ll; 08.06.2013, 21:58.

      Kommentar


      • #18
        Ja, aber nur von mir kann ich nicht ausgehen, ich benutze die Scripts ja nicht, ich teste die ja nur. Wie jetzt so ein Script für Feeds, für den eigenen Bedarf habe und benötige ich nur ein kleines, welches nur für eigene Feeds ausgelegt ist, mit denen es eh keine Probleme gibt. Doch so zum Download, der Aufwand hält sich in Grenzen, wenn ich da noch eine Variante anbiete. Da kommt dann ein Hinweis mit zu, für welche PHP Version geeignet und wenn der größte Teil umgestellt ist, ein deutlicher Hinweis: Bitte nicht mehr verwenden, nur noch für Anschauungszwecke.

        Kommentar


        • #19
          Zitat von newbie1955 Beitrag anzeigen
          Der focus-feed
          FOCUS Online - Politik-News

          z. B. ist nicht valide, das habe ich gemerkt und werde auch noch ein wenig forschen, wie man das ausgleichen kann.
          So, den Fehler habe ich gefunden, hat aber gedauert, hatte auch schon die Nase voll und wollte die Angelegenheit bei Seite schieben, dabei ganz simpel. Es liegt einfach nur an den fehlenden Zeilenumbrüchen bei diesem Feed. Damit sollte es gehen, wenn Du die zweite Zeile gleich hinter der Zeile mit file_get_contents einfügst.

          PHP-Code:
          if (($data file_get_contents($seite)) != false) {

              
          $data preg_replace("/></"">\n<"$data); 
          Nur ich überlege jetzt, ob ich da etwas mache und falls ja, wie am besten. Nur auf Verdacht einfügen, weil mal so ein Feed dabei sein könnte, gefällt mir eigentlich nicht.

          Kommentar


          • #20
            Hallo

            @Melewo, wenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen? Hier der Code mit Deinem Einschub, aber ausgegeben wird nix.
            PHP-Code:
            <?php
            /*------------------------------------------------------------------------------------------------------------------
             Beschreibung: Feedreader für RSS- und Atom-Feeds (http://www.coder-welten.de/projekte/feedreader.htm)
             Autor:        Horst Müller
             Version:      Beta 0.2
             Lizenz:       MIT-Lizenz (http://de.wikipedia.org/wiki/MIT-Lizenz) - Der Autor muss in einem Urheberrechtsvermerk
                           erwähnt werden.
             -------------------------------------------------------------------------------------------------------------------
            */
            ini_set("user_agent""Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")");
            header("Content-Type: text/html; charset=UTF-8");

            error_reporting(E_ALL);                  // Der Wert kann nach Erprobung auf 0 gesetzt werden.

            $seite "http://rss2.focus.de/c/32191/f/443313/index.rss";                 // Die Web-Adresse des zu ladenden Feeds eintragen
            $link  "";                             // Dient nur der Bekanntmachung der Variablen $link
            define("SCHLIESSE"">");                // Für valides HTML je nach Dokumenttyp-Deklaration bei HTML ">" oder bei XHTML " />"
            ?>
            <!DOCTYPE html>
            <html>

            <head>
            <title>Feedreader</title>
                <link href="navi1.css" type="text/css" rel="stylesheet" media="screen" /> 
            </head>

            <body>
                <div class="border">
            <?php

            function wandleTags($daten) {

                
            $daten str_replace("content:encoded""content"$daten);
                
            $daten str_replace("dc:creator""creator"$daten);
                
            $daten preg_replace_callback("/(&[#a-z0-9]+;)/",

                    function(
            $enti) {

                        return 
            mb_convert_encoding($enti[1], "UTF-8""HTML-ENTITIES");
                    }, 
            $daten);
                return 
            $daten;
            }
            function 
            filtereHTML($daten) {

                
            $daten preg_replace("/<p.*?>(.+?)<\/p>/is""$1[br]\n"$daten);
                
            $daten preg_replace("/<div.*?>(.+?)<\/div>/is""$1[br]\n"$daten);
                
            $daten preg_replace("/<span.*?>(.*?)<\/span>/is""$1"$daten);
                
            $daten preg_replace("/<br.*?>/i""[br]\n"$daten);
                
            $daten preg_replace("/<a href.+?>(.*?)<\/a>/is""$1"$daten);
                
            $daten preg_replace("/<img.*?src=\"(.+?)\.(jpg|png).*?>/is""[img]$1.$2[/img]"$daten);

                
            $daten str_replace("<b>""[b]"$daten);
                
            $daten str_replace("</b>""[/b]"$daten);
                return 
            $daten;
            }
            function 
            formeHTML($daten) {

                
            $daten str_replace("[br]""<br".SCHLIESSE$daten);
                
            $daten str_replace("[b]""<b>"$daten);
                
            $daten str_replace("[/b]""</b>"$daten);
                
            $daten preg_replace_callback("/\[img\](.+?)\[\/img\]/",

                function (
            $bilder) {

                    @
            $format getimagesize($bilder[1]);

                    if(
            $format != false) {

                        if (
            $format["mime"] == "image/jpeg" or $format["mime"] == "image/png") {

                            
            $height $format[1];
                            
            $width  $format[0];

                            if (
            $height 250){$height 250;
                                
            $prozent = ($format[1] / $height);
                                
            $width   = ($format[0] / $prozent);
                            }
                            if (
            $width 250){$width 250;
                                
            $prozent = ($format[0] / $width);
                                
            $height  = ($format[1] / $prozent);
                            }
                            return 
            "<img src=\"".$bilder[1]."\" alt=\"Ein Bild\" height=\"".round($height)."\" width=\"".round($width)."\"><br".SCHLIESSE;
                        }
                    }
                }, 
            $daten);
                return 
            $daten;
            }
            function 
            formeDatumZeit($daten) {

                
            $daten preg_replace("/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/""$3.$2.$1 um $4:$5 Uhr"$daten);
                
            $daten substr($daten023);
                return 
            $daten;
            }

            if ((
            $data file_get_contents($seite)) != false) {
                
            $data preg_replace("/></"">\n<"$data); 
                
            $pxml simplexml_load_string(wandleTags($data), "SimpleXMLElement"LIBXML_NOCDATA);

                
            $si =  0;
                
            $cw 18;

                if (
            $pxml->channel->item$leseaus $pxml->channel->item;    // RSS
                
            if ($pxml->entry)         $leseaus $pxml->entry;            // Atom

                
            if ($leseaus != false) {

                    foreach (
            $leseaus as $nachricht) {

                        if ((string)
            $nachricht->link != "") {
                            
            $link $nachricht->link;
                        } elseif (
            $nachricht->link->attributes() != "") {
                            
            $attr $nachricht->link->attributes();
                            
            $link $attr["href"];
                        }
                        if (
            $nachricht->title) {
                            echo 
            "<h3><a href=\"".htmlspecialchars($linkENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($nachricht->titleENT_QUOTES)."</a></h3>\n";
                        }
                        if (
            $nachricht->description) {
                            echo 
            htmlspecialchars(filtereHTML($nachricht->description), ENT_QUOTES)."<br".SCHLIESSE."\n";
                        }
                        if (
            $nachricht->content) {
                            echo 
            "<br".SCHLIESSE."\n".formeHTML(htmlspecialchars(filtereHTML($nachricht->content), ENT_QUOTES))."<br".SCHLIESSE."\n";
                        } elseif (
            $nachricht->summary) {
                            echo 
            formeHTML(htmlspecialchars(filtereHTML($nachricht->summary), ENT_QUOTES))."<br".SCHLIESSE."\n";
                        }
                        if (
            $link != "") {
                            echo 
            "<a href=\"".htmlspecialchars($linkENT_QUOTES)."\" target=\"_blank\">Weiterlesen</a><br".SCHLIESSE."\n";
                        }
                        if (
            $nachricht->pubDate) {
                            echo 
            "<br".SCHLIESSE."".htmlspecialchars(substr($nachricht->pubDate,  016), ENT_QUOTES).
                                 
            " um ".htmlspecialchars(substr($nachricht->pubDate17,  5), ENT_QUOTES)." Uhr";
                        } elseif (
            $nachricht->updated) {
                            echo 
            "<br".SCHLIESSE.formeDatumZeit($nachricht->updated)."\n";
                        } elseif (
            $nachricht->published) {
                            echo 
            "<br".SCHLIESSE.formeDatumZeit($nachricht->published)."\n";
                        }
                        if (
            $nachricht->author) {
                            echo 
            " von ".htmlspecialchars($nachricht->authorENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
                        } elseif (
            $nachricht->creator) {
                            echo 
            " von ".htmlspecialchars($nachricht->creatorENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
                        }
                        echo 
            "<hr".SCHLIESSE;
                        
            $si++;
                        if (
            $si == $cw) {break;
                        }
                    }
                }
            } else { echo 
            "Feed konnte nicht geladen werden!\n";
            }
            ?>
              </div> 
            </body>
            </html>
            Gruß
            newbie1955

            Kommentar


            • #21
              Zitat von newbie1955 Beitrag anzeigen
              wenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen?
              Bei mir ladet der Feed dann, könnte höchstens noch mit der Version zusammen hängen, da benutzt Du ja noch die ältere: XML-Feedreader

              Kommentar


              • #22
                Nur die Überschrift vm focus

                zeigt er mir an. Habe feedreader 1.01 genommen. Spiegel oder ähnliche feeds klappen.
                Zuletzt geändert von newbie1955; 09.06.2013, 11:06.

                Kommentar


                • #23
                  Du könntest es höchstens statt mit ">\n<" noch einmal mit ">\r\n<" versuchen, sonst wüsste ich nicht, was noch sein könnte, bei mir ladet der Feed ja nun.

                  Die Laufzeit des Scripts ist beim Focus reichlich hoch, weil der Feed viele kleine Images enthält und das Script ja jedes Image einzeln überprüft. Das könnte im ungünstigsten Fall zu einem Abbruch führen, wenn das Script länger als 30 Sekunden rödelt. Doch dann sollte wohl gar nichts mehr ausgegeben werden. Überlege so, wie man am besten zählen könnte, dass nicht mehr als ein Image pro Item überprüft und geladen wird.

                  Vielmehr fällt mir gerade nicht ein.

                  Kommentar


                  • #24
                    Naja,

                    lange rödeln tut er nicht. Aber zur Not könnte ich den Focus auch separat behandeln. Ich müsste ohnehin den feedreader abspecken, weil ich ja nur die Links, title und descriptions bräuchte. Die (descr.) ich ja, wie gesagt, gerne in tooltips packen würde. Doch irgendwie scheitere ich an der Syntax. Wenn ich meinen beschränkten magpie parser so modifiziere
                    PHP-Code:
                    echo "<li><a href = '$href' target='_blank' title = '$desc' >$title</a></li>"
                    dann kommt die Description als tooltip, allerdings nur wenn in der description nix anderes drinsteht, wie images oder links, und nur, wenn das Ganze nicht summary heißt. Außerdem ist das dann ohne htmlspecialchars. Aber wenn ich stattdessen
                    PHP-Code:
                     echo "<li><a href=\"".htmlspecialchars($href)."\" target=\"_blank\" title = \" .htmlspecialchars($desc)">".htmlspecialchars($title)."</li></a>"; 
                    versuche, verhaue ich mich immer in der Syntax und komme mit dem ganzen Gemurkse aus "" und \ durcheinander. Könntest Du mir vielleicht EINMAL sowas auseinanderdröseln und mir einen Tip geben wie man die description (möglichst noch beschränkt auf zwei Sätze) als tooltip einbaut in die Ausgabe?

                    Gruß und Dank
                    newbie1955

                    Kommentar


                    • #25
                      Beim Focus 42.34s (onload: 42.37s) und davon entfallen 41,43 auf Wartezeit. Werde mal sehen, was sich da machen lässt. Im Vergleich den Feed von der Tagesschau mit 1.05s (onload: 1.06s) wobei der auch schon einmal schneller war.

                      Aber das ist doch ganz einfach. Du brauchst doch nur alle einfachen Anführungszeichen gegen doppelte Gänsefüßchen auszutauschen und alle doppelten Gänsefüßchen im String mit einem Backslash \ zu maskieren. Wo liegt Dein Problem?

                      PHP-Code:
                       "Ich bin ein String und enthalte einige \"Gänsefüßchen\" und was ist dabei?"
                      Und wenn Du nun etwas mit Verknüpfung". ."einfügen möchtest, was mit "Gänsefüßchen" angezeigt werden soll,
                      dann fügst Du das halt da ein, wie bei:

                      PHP-Code:
                      "Ich bin ein String und enthalte einige \"".   Hier ist doch Platz für Code im String   ."\" und was ist dabei?"
                      Und wenn Du etwas ohne "Gänsefüßchen" anzuzeigen einfügen möchtes, dann halt normal:

                      PHP-Code:
                      "Ich bin ein String und enthalte einige ".   Hier ist doch Platz für Code im String   ." und was ist dabei?"
                      Zuletzt geändert von Melewo; 09.06.2013, 11:59.

                      Kommentar


                      • #26
                        Zu blöd

                        Habe es so versucht, kriege es aber nicht auf die Reihe

                        PHP-Code:
                        echo "<li><a href=\".htmlspecialchars($href).\" target=\"_blank\" title = \" .htmlspecialchars($desc)"htmlspecialchars($title)."</li></a>"
                        oder in Deinem feedreader von neulich:
                        PHP-Code:
                           foreach ($pxml->channel->item as $nachricht) {

                                    if (
                        $nachricht->title) {
                                       echo 
                        "<li><a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\" title = \"".htmlspecialchars($nachricht->description).">".htmlspecialchars($nachricht->title)."</li></a>"
                        Könntest Du mir einen Tipp geben, wo es hakt?

                        Kommentar


                        • #27
                          Gebe es doch einfach mit echo aus, schaue in den Quelltext und Du siehst, was du vergessen hast. Ohne Testausgabe, lösche aus

                          PHP-Code:
                          "...   title = \"".htmlspecialchars($nachricht->description).">  ..." 
                          den Code mit Verknüpfung

                          PHP-Code:
                          ".htmlspecialchars($nachricht->description)." 
                          und Du siehst was übrig bleibt:

                          PHP-Code:
                          "...  title = \"   >    ..." 
                          Fehlt da irgendetwas?

                          Das mit den fehlenden Zeilenumbrüchen habe ich jetzt erst einmal noch etwas sauberer gelöst, nur der Feed enthält insgesamt 221 img-Tags und ich weiß immer noch nicht, wie ich die Dinger auf 10 reduziere. Reduzieren wäre ja nicht das Problem, doch bei anderen Feeds können die mal in description, mal in content und mal in summary vorkommen.

                          Kommentar


                          • #28
                            Also

                            ich bin da total behämmert in der Angelegenheit. Also nochmal: Vorlage:

                            PHP-Code:
                                  foreach ($pxml->entry as $nachricht) {

                                        if (
                            $nachricht->title){ $attr $nachricht->link->attributes();
                                            echo 
                            "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></a>";
                                        } 
                            Lösungsversuch:

                            PHP-Code:
                                 foreach ($pxml->entry as $nachricht) {

                                        if (
                            $nachricht->title){ $attr $nachricht->link->attributes();
                                            echo 
                            "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = "htmlspecialchars($nachricht->summary).">".htmlspecialchars($nachricht->title)."</li></a>"
                            Ergebnis: wieder kommt nur ein Wort des Summarys als tooltip. Immerhin überhaupt was.

                            Kommentar


                            • #29
                              Es fehlen die Anführungszeichen bei title. Siehst du ja, wenn du dir die HTML-Ausgabe anschaust.

                              Kommentar


                              • #30
                                Anführungszeichen

                                nächster Versuch, klappt auch nicht:

                                PHP-Code:
                                 foreach ($pxml->entry as $nachricht) {

                                            if (
                                $nachricht->title){ $attr $nachricht->link->attributes();
                                                echo 
                                "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = \""htmlspecialchars($nachricht->summary)"\".">".htmlspecialchars($nachricht->title)."</li></a>"; 

                                Kommentar

                                Lädt...
                                X