• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

while-Schleifen nacheinander, nicht gleichzeitig, durchlaufen

xSTVNx

Mitglied
Ich habe eine Datei crawl-feeds.php. Mit dieser werden die RSS-Feeds der in der DB gespeicherten Webseiten ausgelesen und diverse Infos in eine DB geschrieben...

PHP:
$select = "SELECT *";
$from     = "FROM $db_table_authors";
$where     = "WHERE author_type = 'blogspot'";
$order     = "ORDER BY author_id DESC";
$limit     = "";

$sql = "$select $from $where $order $limit";  
$query = mysql_query($sql);  

while ($row = mysql_fetch_object($query)) {    
    $author_id = $row->author_id;
    $author_name = $row->author_name;
    $author_link = $row->author_website;
    $author_rss = $row->author_rss;
    
    getRssfeedBlogspot("$author_id","$author_name","$author_link","$author_rss");
}

Wie kann ich denn jetzt hinbekommen, dass das Script nicht alles gleichzeitig ausführt. Sondern das nächste while erst startet, wenn der vorhergehende abgeschlossen/fertig ist?

Also es soll die Funktion getRssfeedBlogspot von Webseite X erst beenden, bevor es diese für Webseite Y startet.

Geht das irgendwie?

(Ich hoffe, das war jetzt ansatzweise nachvollziehbar, was ich will - weiß nciht so recht, wie ich mich ausdrücken soll. :/)

Danke!
xSTVNx
 
Dafür sollte man wahrscheinlich die Funktion getRssfeedBlogspot() sehen. Da muss der Fehler stecken, eine while-Schleife wird nämlich nicht gleichzeitig ausgeführt sondern "Loop für Loop"
 
Die schaut folgendermaßen aus. :)

PHP:
function getRssfeedBlogspot($id,$name,$link,$rss) {
            
    global $db_table_recipes;
    
    $feed_url = $rss;
    $feed_url .= '?max-results=999';
    $xml = simplexml_load_file($feed_url);

    echo '<div class="Autorbox"><h2><a href="'.$link.'">'.$name.'</a></h2>';
    echo '<h3>'.$feed_url.'</h3>';
    echo '<ul>';
    
    foreach($xml->entry as $item) {
        $title         = utf8_decode($item->title);
        $permalink     = $item->link[4]['href'];
        $pubdate    = $item->published;            
        $pubdate     = strftime("%Y-%m-%d", strtotime($pubdate));
        
        echo $pubdate;
        
        //Testen ob Eintrag bereits vorhanden
        $sql = "SELECT recipe_id FROM $db_table_recipes WHERE recipe_permalink='$permalink'"; 
        $query = mysql_query($sql); 
        $num_rows = mysql_num_rows($query);
        
        //Wenn nicht vorhanden neu reinschreiben 
        if ($num_rows == 0) { 
            $sql2 = "INSERT INTO $db_table_recipes (recipe_name,recipe_permalink,author_id,recipe_date,recipe_status) 
            VALUES ('$title','$permalink','$id','$pubdate','active')"; 
            $query2 = mysql_query($sql2); 
            echo '<li class="erfolg"><a href="', $permalink ,'">', $title ,'</a> - NEU HINZUGEFÜGT</li>';
        } else {
            echo '<li class="misserfolg"><a href="', $permalink ,'">', $title ,'</a> - BEREITS VORHANDEN</li>';
        }
    }
    echo '</ul>';
    
    echo '</div>';

}
 
Und woran erkennst Du, dass alles gleichzeitig ausgeführt wird?

Eben.

Schleifen werden niemals gleichzeitig ausgeführt. Und überhaupt ist nichts in PHP asynchron.

Ich kann nur raten was du meinst. Aber willst du die Ausgabe Zeitverzögert anzeigen lassen?
Wenn ja solltest du verstehen wie PHP arbeitet. Es wird nämlich das komplette PHP Dokument geparst und dann erst ausgegeben. d.H. für dich zum Zeitpunkt an dem du deine Ausgabe zu Gesicht bekommst sind bereits sämtliche Schleifen (nacheinander) durchlaufen.

Falls du also Teile deiner Ausgabe anzeigen lassen willst sobald diese "geladen" sind musst du auf AJAX zurückgreifen.
 
Zurück
Oben