I'll just post the whole thing since it would be a bit confusing otherwise:
<?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> That var_dump of $achievement just produces NULL over and over again (obviously due to the loop) instead of any information about the array. Doing a var_dump of $rosterxml produces the expected effect though, so cURL seems to work fine outside of the while loop.
libxml_set_streams_context()anti-user-agent-sniffing solution better :)