DOMDocument::load() Тайм-аут

Я использую DOMDocument::load() загрузить файл XML с URL:

$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");

Есть ли способ прервать или прекратить загрузку после определенного времени ожидания, если загрузка URL заняла более X секунд?

Если это невозможно сделать с помощью DOMDocument::load()Есть ли другой способ установить тайм-аут для загрузки XML из URL?

2 ответа

Вы можете использовать libxml_set_streams_context для настройки поведения. Опции обертки потока HTTP включают timeout,

$options = [
  'http' => [
    'method' => 'GET',
    'timeout' => '5'
  ]
];
$context = stream_context_create($options);
libxml_set_streams_context($context);

$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");

В дополнение к отличному ответу @thw о настройке параметра тайм-аута путем создания нового контекста Steam, я обнаружил, что в потоковом контексте по умолчанию используется php.ini установка для default_socket_timeout как его тайм-аут.

Смена вашего php.ini как это:

; Increase from the default of 60 seconds
default_socket_timeout = 120

может быть простым способом увеличить время ожидания без изменения кода приложения, хотя это также повлияет на другие контексты потока, которые также используют сокеты.

Другие вопросы по тегам