лучший способ проверить, существует ли xml (без расширения файла)

К сожалению, я не могу проверить это прямо сейчас, потому что XML (который будет на другом сервере) отключен. URL-адрес xml-файла будет выглядеть так: http://url.com:123/category?foo=bar. Как видите, у него нет расширения файла .xml. Я забыл вставить проверку файла, чтобы в сообщениях об ошибках не выводился URL-адрес XML-файла.
simple_load_file отлично работает с этим URL-адресом, но я не уверен насчет file_exists!

Будет ли это работать ?:

if(file_exists('http://url.com:123/category?foo=bar')) { 
$xml = simplexml_load_file('http://url.com:123/category?foo=bar');
//stuff happens here
} else{echo 'Error message';}

Я не уверен, поскольку file_exists не работает с URL-адресами. Спасибо!


person dnnr    schedule 03.11.2015    source источник


Ответы (2)


Как вы подозреваете, file_exists() не работает с URL-адресами, но _ 2_ и _ 3_ выполните:

if (fclose(fopen("http://url.com:123/category?foo=bar", "r"))) {
    $xml = simplexml_load_file('http://url.com:123/category?foo=bar');
    //stuff happens here
} else {
    echo 'Error message';
}
person miken32    schedule 04.11.2015

Это бесполезно, если вы просто попытаетесь получить данные для их анализа. Особенно, если URL-адрес, который вы вызываете, является самой программой / скриптом. Это просто будет означать, что сценарий выполняется дважды.

Я предлагаю вам получить данные с помощью file_get_contents(), обработать / отловить ошибки и проанализировать полученные данные.

Просто блокируем ошибки:

if ($xml = @file_get_contents($url)) {
  $element = new SimpleXMLElement($xml);
  ...
}
person ThW    schedule 04.11.2015
comment
Это имеет смысл, поскольку XML-файлы могут быть довольно длинными. Спасибо. - person dnnr; 05.11.2015