Ene keer goed geladen, andere keer niet
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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);
}
}
?>
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:
Code (php)
1
2
3
4
2
3
4
<?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");
?>
$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?
Gewijzigd op 01/01/1970 01:00:00 door Martijn van den Ende
Nu zouden alle foutjes zichtbaar moeten worden, want je probleem vertoont alle symptomen van een php fatal error, behalve de foutmelding zelf :)
(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 (php)
1
2
3
4
2
3
4
<?php
$guild = new loadXML("http://armory.wow-europe.com/guild-info.xml?r=Silvermoon&n=Hodirs+Hammer");
$members = $guild->xml->guildInfo->guild->members;
?>
$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)
<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>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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";
}
?>
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>
Iemand een idee?
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(..); ?
Code (php)
1
2
3
2
3
<?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" } } } }
?>
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.
Gewijzigd op 01/01/1970 01:00:00 door Martijn van den Ende
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.
Hoor ik hiervoor niet een error message the krijgen?