Search code examples
phpxmlflickr

failed to load external entity(flickr website)


I am trying to retrieve data from the Flickr website and after running the php code it gives me two errors. 1) failed to load external entity 2) Invalid argument supplied for foreach()

Find below the php code:

<?php

$url = file_get_contents("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=ff8c4c178209865b1ac5ee3f2d492de0&lat=51.5424&lon=-0.1734&radius=2&page=2&per_page=200&text=houses");

$xml = simplexml_load_file($url);
foreach ($xml->photo as $entry){
echo $entry->id;
echo $entry->owner;
echo $entry->title; 
}
?>

See below an excerpt of the xml structure:

<rsp stat="ok">
<photos page="2" pages="6" perpage="200" total="1199">
<photo id="476179009" owner="55662771@N00" secret="cafd39b094" server="219" farm="1" title="Seeing the Sun Going Down" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="5858562848" owner="40837632@N05" secret="19c083483f" server="5154" farm="6" title="Lords - June 2011 - E v SL - Rangana Herath Delivers" ispublic="1" isfriend="0" isfamily="0"/>
</photos>
</rsp>

Solution

  • simplexml_load_file expects an filename or URL, but file_get_contents already fetches the data from the given URL. So either pass $url to simplexml_load_file or use simplexml_load_string

    Edit: Also your loop should look like this, refer to the simplexml documentation.

    foreach ($xml->photos->photo as $entry) {  
      echo $entry->attributes()->id;
      echo $entry->attributes()->owner;
      echo $entry->attributes()->title; 
    }