2016-06-17 36 views
0

Ich versuche, ein Skript zu machen, die URLs von sitemap.xml laden und es in Array setzen. Sie sollte alle Seiten nacheinander laden, und nach jedem sollte etwas gedruckt werden.PHP cUrl Schleife mit Echo

<?php 

set_time_limit(6000); 

$urls = array(); 

$DomDocument = new DOMDocument(); 
$DomDocument->preserveWhiteSpace = false; 
$DomDocument->load('sitemap.xml'); 
$DomNodeList = $DomDocument->getElementsByTagName('loc'); 


//parsovani xml, vkladani linku do pole 
foreach($DomNodeList as $url) { 
    $urls[] = $url->nodeValue; 
}     

foreach ($urls as $url) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch);  
    echo $url."<br />"; 
    flush(); 
    ob_flush(); 
}  

?> 

Funktioniert immer noch nicht. Laden sehr lange Zeit, druckt nichts. Ich denke, dass Flush nicht funktioniert.

Sieht jemand das Problem?

Vielen Dank Filip

+0

Sie brauchen nicht curl_init innerhalb der Schleife. Sie können ein Curl-Objekt erstellen und es mehrmals verwenden. –

+0

Können Sie bitte ein Beispiel zeigen, um sicher zu gehen? :) – Filip

+0

Sie müssen nur "$ data" aussprechen. Und Sie können sich wahrscheinlich ein paar Codezeilen sparen, indem Sie '$ data = file_get_contents ($ url) verwenden;' –

Antwort

0

ich so etwas wie diese

<?php 

set_time_limit(6000); 

$urls = array(); 

$DomDocument = new DOMDocument(); 
$DomDocument->preserveWhiteSpace = false; 
$DomDocument->load('sitemap.xml'); 
$DomNodeList = $DomDocument->getElementsByTagName('loc'); 


foreach($DomNodeList as $url) { 
    $urls[] = $url->nodeValue; 
}     

foreach ($urls as $url) { 
    $data = file_get_contents($url); 
    echo $url."<br />". $data; 
}  

?> 

Oder noch besser anstelle von 2-Schleifen laufen würde.

<?php 

set_time_limit(6000); 

$urls = array(); 

$DomDocument = new DOMDocument(); 
$DomDocument->preserveWhiteSpace = false; 
$DomDocument->load('sitemap.xml'); 
$DomNodeList = $DomDocument->getElementsByTagName('loc'); 


foreach($DomNodeList as $url) { 
    $curURL = $url->nodeValue; 
    $urls[] = $curURL; 
    $data = file_get_contents($curURL); 
    echo $curURL."<br />". $data; 
}  

?> 
+0

Vielen Dank Garry. Ich schätze es! Es endet nach wenigen Minuten mit 500 FEHLER: /. – Filip

+0

Sie erhalten wahrscheinlich einen Speicherfehler. Ich würde versuchen, es von der Befehlszeile ausführen, wenn das eine Option für Sie ist ... effizienter. Und ändern Sie diese Zeile set_time_limit (6000), um diese set_time_limit (0) - Das wird Ihr Skript nicht zu Timeout sagen. –

+0

Danke. Gibt es eine Möglichkeit, Fehler in der Datei zu drucken? Ich habe keine Möglichkeit, es von der Konsole aus zu starten. – Filip