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
может быть простым способом увеличить время ожидания без изменения кода приложения, хотя это также повлияет на другие контексты потока, которые также используют сокеты.