file_get_contents не работает с внешними сайтами

Я использую это более 2 месяцев и работал нормально, пока несколько дней назад не появилось сообщение об ошибке. Я использую Steam API, чтобы получить некоторую информацию об игроках.

$url = "http://steamcommunity.com/id/CGaKeepoN/?xml=1";

Страница не пустая, на ней есть xml-документ. Итак, я сначала подумал, что мой хост выключил allow_url_fopen, а они нет (я спросил их).

Я также пытался использовать error_reporting(E_ALL); ini_set('display_errors', 1);

И вот что я получаю:

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "" on line 6 Notice: Trying to get property of non-object on line 7

Теперь я использую это: $xml = simplexml_load_file(file_get_contents($url));

И я хотел бы продолжать использовать его, потому что установка cURL сейчас не вариант. Знаете ли вы лучший (или работающий) способ сделать это? Или как исправить эту ошибку?

Мой полный код:

error_reporting(E_ALL);
ini_set('display_errors', 1);
//$url = "http://steamcommunity.com/id/CGaKeepoN/?xml=1";
$url = "xml.txt";
ini_set('allow_url_fopen ','ON');
$xml = file_get_contents($url) or die ("file_get_contents failed");
$xml = simplexml_load_string($xml) or die ("simplexml_load_string failed");
$profilepic = $xml->avatarIcon;
$pic = $xml->avatarFull;
$steamID = $xml->steamID;
$lastonline = $xml->stateMessage;
echo $xml;
echo $profilepic;
echo $pic;
echo $steamID;
echo $lastonline;

РЕДАКТИРОВАТЬ:

Если я использую внутренний URL-адрес, он загружает данные, но когда я пытаюсь использовать любой URL-адрес, использующий протокол http, просто запускает ошибку file_get_contents failed, даже если URL-адрес принадлежит моему веб-сайту. Я готов использовать cURL, если нет другого решения. Я также подумал о создании php-скрипта, который загружает данные и сохраняет их в файле на сервере (а затем запускает cronjob каждые 10 минут), но он все равно будет использовать file_get_contents...


person KeepoN    schedule 27.08.2015    source источник
comment
Когда file_get_contents получает ресурс, вы должны использовать simplexml_load_string для его результата. Вы передаете туда не имя файла, а буквальные данные. - Конечно, только если он был успешно получен. Вам нужно отладить результат file_get_contents.   -  person mario    schedule 28.08.2015
comment
Я также пытался использовать simplexml_load_string, как я уже говорил, но я продолжаю получать ту же ошибку. Проблема в том, что file_get_contents не получает данные.   -  person KeepoN    schedule 28.08.2015
comment
Ну, я знаю. Вопрос в том, почему это не так. Многие возможные причины, такие как блокировка пользовательского агента. Простое тестирование в браузере ни о чем не говорит. Используйте curl -V/wget -S для отладки из командной строки, затем get_headers() из PHP и этого сервера, чтобы узнать, запрещены ли вам опросы потокового API.   -  person mario    schedule 28.08.2015
comment
comment
@mario, я попробую, но невозможно, чтобы меня забанили в API, потому что он на 100% общедоступен, и я проверил и могу получить к нему доступ   -  person KeepoN    schedule 28.08.2015


Ответы (1)


file_get_content возвращает строку, поэтому вместо этого используйте simplexml_load_string.

Этот код работает для меня, проверено.

$url = "http://steamcommunity.com/id/CGaKeepoN/?xml=1";
$xml = simplexml_load_string(file_get_contents($url));
$profilepic = $xml->avatarIcon;
$pic = $xml->avatarFull;
$steamID = $xml->steamID;
$lastonline = $xml->stateMessage;
var_dump($url);
var_dump($xml); //-> string(45) "http://steamcommunity.com/id/CGaKeepoN/?xml=1" bool(false)
echo $xml;
echo $profilepic;
echo $pic;
echo $steamID;
echo $lastonline;
person RiggsFolly    schedule 27.08.2015
comment
Что именно вы получаете? Потому что я не получаю никаких ошибок, но строка пуста, когда не должна... - person KeepoN; 29.08.2015