cURL не работает в цикле - PullRequest
1 голос
/ 21 июля 2010

Я просто опубликую все это, так как в противном случае это будет немного сбивать с толку:

<?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 для $ success просто генерирует NULL снова и снова (очевидно из-за цикла) вместолюбая информация о массиве.Однако выполнение var_dump со значением $ rosterxml дает ожидаемый эффект, поэтому, похоже, что cURL отлично работает вне цикла while.

1 Ответ

5 голосов
/ 21 июля 2010

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

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

...