2010-07-21 5 views
1

я просто размещаю все это, так как это было бы немного запутанным иначе:Curl не похож на работу в время цикла

<?php 
echo "<html> 
<head> 
    <title>ARMORY.</title> 
    <meta http-equiv='Content-Type' content='text/html' charset=iso-8859-1> 
</head> 
<body> 
<table width='50%' border='1' cellpadding='10' cellspacing='10'>"; 


$server = "Sunstrider"; 
$guild = "Mist"; 
$url='http://eu.wowarmory.com/guild-info.xml?r='.$server.'&gn='.$guild.'&p=1'; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
$xml = curl_exec($ch); 
$rosterxml = new SimpleXMLElement($xml); 
curl_close($ch); 
$array = array(); 



foreach($rosterxml->guildInfo->guild->members->character as $char) 
    if(strtolower($char['level']) === '80') 
    { 
     $array[] = $char['name']."<br />"; 

    } 

    echo " 
    <tr> 
    <td valign='middle'>Name</td> 
    <td valign='middle'>TEST</td> 
    </tr>"; 
$i = 0; 
while($array[$i] != null) 
{ 

$name = $array[$i]; 
$raidurl='http://eu.wowarmory.com/character-achievements.xml?r='.$server.'&cn='.$name.'&c=168'; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $raidurl); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
$xml2 = curl_exec($ch); 
$achievementxml = new SimpleXMLElement($xml2); 
curl_close($ch); 
var_dump($achievement); 

echo "<tr> 
    <td>$array[$i]</td> 
    <td></td> 
    </tr>"; 
$i++; 



} 

?> 

</body> 
</html> 

Это var_dump от $ достижения просто производит NULL снова и снова (очевидно, из-за цикла) вместо любой информации о массиве. Выполнение var_dump $ rosterxml дает ожидаемый эффект, поэтому cURL, кажется, отлично работает вне цикла while.

+0

Вы протестировали URL-адрес, к которому он пытается получить доступ в цикле? – Fosco

+0

См. Здесь, как обрабатывать ошибки curl: http://fr.php.net/manual/en/function.curl-error.php – greg0ire

+0

Мне по-прежнему нравится решение 'libxml_set_stream_streamtext()' anti-user-agent-sniffing solution:) – Wrikken

ответ

5

Это потому, что ваша переменная называется $achievementxml, а не $achievement.

Я бы посоветовал вам код error_reporting=E_ALL, чтобы вы могли поймать ошибки, подобные этому. Неопределенные переменные приведут к сообщению об ошибке уровня E_NOTICE.

+1

+1, при разработке вы можете использовать E_ALL | E_STRICT, чтобы получить максимальную многословие. – greg0ire

+0

Ага, казалось бы, я идиот. Спасибо, и спасибо за совет. Я довольно новичок в PHP, как вы могли бы сказать, и я, вероятно, не помогаю, оставляя мой код полностью лишенным комментариев, но там он у вас есть! – James

+0

Или ярлык: '-1' (который будет устанавливать все биты), возможно, даже новые мысли op E_ * константы в будущем, пока мы не получим E_REALLY_ALL – Wrikken

Смежные вопросы