2016-06-17 8 views
0

Я пытаюсь создать скрипт, который загружает URL-адреса из файла sitemap.xml и помещает его в массив. Они должны загружать все страницы один за другим, а после каждого - что-то печатать.PHP cUrl loop with 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(); 
}  

?> 

Все еще не работает. Загрузка очень долгое время, ничего не печатает. Я думаю, что флеш не работает.

Кто-нибудь видит проблему ??

Большое спасибо Filip

+0

Вам не нужен curl_init внутри цикла. вы можете создать один объект curl и повторно использовать его несколько раз. –

+0

Можете ли вы показать пример, пожалуйста, пожалуйста? :) – Filip

+0

Вам просто нужно вывести «$ data». И вы, вероятно, можете сэкономить несколько строк кода, используя '$ data = file_get_contents ($ url);' –

ответ

0

Я бы запустить что-то вроде этого

<?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; 
}  

?> 

Или еще лучше вместо 2-х петель.

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

Спасибо, Гарри. Я ценю это! В результате через несколько минут на 500 ERROR: /. – Filip

+0

Вероятно, вы получаете ошибку в памяти. Я бы попробовал запустить его из командной строки, если это вариант для вас ... Более эффективный .. И измените эту строку set_time_limit (6000) на этот set_time_limit (0) - Это скажет вашему скрипту не время ожидания. –

+0

Спасибо. Есть ли способ распечатать ошибку в файле? У меня нет возможности запускать его с консоли. – Filip