2010-07-21 45 views
1

我只是张贴了整个事情的工作,因为这将是一个有点混淆,否则:卷曲似乎并不在一个while循环

<?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一遍遍(显然是由于循环)而不是关于数组的任何信息。做一个$ rosterxml的var_dump会产生预期的效果,所以cURL似乎在while循环之外很好地工作。

+0

你测试了它在循环内部试图访问的URL吗? – Fosco 2010-07-21 18:46:11

+0

请看这里如何处理curl错误:http://fr.php.net/manual/en/function.curl-error.php – greg0ire 2010-07-21 18:47:35

+0

我仍然更喜欢'libxml_set_streams_context()'反用户代理 - 嗅探解决方案: ) – Wrikken 2010-07-21 18:53:28

回答

5

这是因为您的变量被称为$achievementxml而不是$achievement

我建议你用error_reporting=E_ALL编码,这样你就可以捕获这样的错误。未定义的变量将导致E_NOTICE级别的错误消息。

+1

+1,在开发时,您甚至可以使用E_ALL | E_STRICT获得最大的冗长度。 – greg0ire 2010-07-21 18:48:56

+0

啊哈,看来我是个白痴。谢谢,并感谢您的建议。我对PHP很陌生,因为你可能会知道,而且我可能不会通过保持我的代码完全没有评论来帮助解决问题,但是你已经拥有它了! – James 2010-07-21 18:52:09

+0

或者快捷键:'-1'(它会设置所有位),所以未来可能甚至会有新的思路运行E_ *常量,直到我们得到一个E_REALLY_ALL – Wrikken 2010-07-21 18:55:07