@ree4i

Как проверить simplexml_load_file на удачную загрузку?

Скриптом стандартно подгружаю xml с не самого стабильного сервака.
$linkxml="http://ссылка.ру";
$xml = simplexml_load_file($linkxml);

часто скрипт выдаёт набор стандартных ошибок, типа:
Warning: simplexml_load_file() [function.simplexml-load-file]: http://ссылка.ру:6: parser error : Opening and ending tag mismatch: hr line 5 and body in /home/public_html/ссылка/update.php on line 106

Проверка ответа сервера не поможет, т.к. сервак ответит "200", а файл всё-равно не загрузится до конца.
Как правильно осуществить проверку типа:
$linkxml="http://ссылка.ру";
$xml = simplexml_load_file($linkxml);
if (!simplexml_load_file($linkxml)) {echo 'файл не получен';} else {$xml = "не могу придумать как получить сюда данные из simplexml_load_file";}

И сразу вопрос в догонку - как при неудачной загрузки перезапустить скрипт, вернее как это сделать правильнее, чем тупым копированием всего кода парсинка из else в if?
  • Вопрос задан
  • 1496 просмотров
Решения вопроса 1
difiso
@difiso
В параллельной вселенной я космонавт
В документации сказано
Возвращает объект (object) класса SimpleXMLElement со свойствами, содержащими данные, которые хранятся внутри XML-документа или FALSE в случае возникновения ошибки.


А тот warning, что возникает это из-за неверного XML, о чем в ЛОГАХ и пишется. В коде проверяйте следующим образом: if ($xml !== false) {...}

Если у вас возвращается неверный XML, то со временем это никак не поменяется (скорее всего), поэтому перезапуск и дальнейшие попытки загрузить ни к чему не приведут. А если уж хочется пытаться загрузить снова, то попробуйте
do {
$xml = simplexml_load_file(...);
} while ($xml === false);
// $xml загружен.

Только в таком виде будьте осторожны - очень легко получить бесконечный цикл.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 11:46
3000 руб./за проект
23 апр. 2024, в 11:38
20000 руб./за проект