Dag mensen,

Momenteel ben ik bezig met een site die gegevens moet halen uit de World of Warcraft Armory. Ik heb een class gemaakt die er als volgt uit ziet:
<?php
class loadXML
{
var $xml;

function __construct($url, $define = "")
{
if($define == 1)
{
define("USE_CURL", true);
}
$ch = curl_init();
$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$rawxml = curl_exec($ch);
curl_close($ch);
$this->xml = simplexml_load_string($rawxml);
}
}
?>
Hierbij is $url de link naar de pagina en $define een bool afhankelijk of dit wel of niet de eerste keer is dat cURL geopend wordt.

Vervolgens roep ik deze class aan:
<?php
$server = new loadXML("http://www.wow-europe.com/realmstatus/index.xml";, 1);
$guild = new loadXML("http://armory.wow-europe.com/guild-info.xml?r=Silvermoon&n=Hodirs+Hammer");
?>
Met $server haal ik informatie op of de Realm wel of niet online is, met $guild haal ik gegevens op uit de Armory van een guild. Vervolgens haal gebruik ik de XML gegevens (bijv. met foreach($guild->blabla as $blabla) etc.) om te verwerken in de site. Ik test alles lokaal en daar werkt het prima, maar wanneer ik deze upload naar een andere server, werkt het wel om de server informatie te verwerken, maar bij het verwerken van de guild gegevens doet ie of niets, of kapt halverwege de pagina af (zie www.n-dsign.com/?p=members als voorbeeld).

Ik heb werkelijk geen idee waarom de eerste aanroep wel werkt, maar de tweede niet. Als ik echter een 'kale' testversie gebruik (www.n-dsign.com/testxml.php) werkt het prima. Weet iemand wat hier mis gaat?
Zet eens boven aan index.php (ik neem aan dat je via $_GET[p] een script include in index.php) deze regeltjes:
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?>
Nu zouden alle foutjes zichtbaar moeten worden, want je probleem vertoont alle symptomen van een php fatal error, behalve de foutmelding zelf :)
Staat erin, ik krijg nu het volgende te zien:

(in sidebar): Warning: Invalid argument supplied for foreach() in /var/www/vhosts/n-dsign.com/httpdocs/sidebar_left.php on line 8

(in members.php): Fatal error: Cannot use object of type loadXML as array in /var/www/vhosts/n-dsign.com/httpdocs/members.php on line 2

Inderdaad een fatal error, maar lokaal heeft hij deze error niet, en bij het verwerken van de server status gegevens (wat op exact dezelfde manier werkt) krijg ik dit ook niet.
Hoe ziet je members.php eruit, en dan vooral de regeltjes rond (en inclusief natuurlijk :P) regel 2?
Code van de classes.php heb je al (hierboven). Dit staat er in de index.php

<?php
$guild = new loadXML("http://armory.wow-europe.com/guild-info.xml?r=Silvermoon&n=Hodirs+Hammer");
$members = $guild->xml->guildInfo->guild->members;
?>
En dit in members.php (volledige code)
<?php
echo "Total membercount: ".$members["memberCount"]."<br /><br />";
?>
<table>
<tr>
<td><b>Name:</b></td><td><b>Race:</b></td><td><b>Class:</b></td><td><b>Lvl:</b></td><td><b>Rank:</b></td>
</tr>
<?php

foreach($members->character as $member)
{
$name = $member["name"];
$race = raceId($member["raceId"]);
$class = classId($member["classId"]);
$level = $member["level"];
$rank = rankId($member["rank"]);
echo "<tr><td>".$name."</td><td>".$race."</td><td>".$class."</td><td>".$level."</td><td>".$rank."</td></tr>\n";
}
?>
</table>
Zet vóór regel 2 van members.php eens
<?php
var_dump($members);
?>

Ik heb het idee dat die $members niet dezelfde inhoud heeft als dat wat jij toewijst aan $members in index.php. Doe je soms ergens $members=new loadXML(..); ?
Resultaat:

<?php
object(SimpleXMLElement)#12 (2) { ["@attributes"]=> array(1) { ["memberCount"]=> string(1) "2" } ["character"]=> array(2) { [0]=> object(SimpleXMLElement)#10 (1) { ["@attributes"]=> array(8) { ["achPoints"]=> string(3) "510" ["classId"]=> string(1) "2" ["genderId"]=> string(1) "0" ["level"]=> string(2) "71" ["name"]=> string(8) "Orvathar" ["raceId"]=> string(1) "1" ["rank"]=> string(1) "0" ["url"]=> string(23) "r=Silvermoon&n=Orvathar" } } [1]=> object(SimpleXMLElement)#14 (1) { ["@attributes"]=> array(8) { ["achPoints"]=> string(4) "1220" ["classId"]=> string(1) "6" ["genderId"]=> string(1) "0" ["level"]=> string(2) "80" ["name"]=> string(7) "Halling" ["raceId"]=> string(1) "4" ["rank"]=> string(1) "2" ["url"]=> string(22) "r=Silvermoon&n=Halling" } } } }
?>

Het is niet te geloven... Nu pakt ie members.php wel goed, d.w.z. geen problemen met laden, geen errors, terwijl ik helemaal niets heb gedaan, maar nog steeds krijg ik een ongewenste error in de sidebar.
Nog meer ideeën? Zou het aan de functie simple_xml_load_string() kunnen liggen?
Ik denk eerder aan de website waar je het vandaan haalt. Misschien krijg je eent time-out o.i.d.

Reageren