есть функция а в ней прописан внешний адрес для отправки данных API - CURLOPT_URL=>'http://*.*/xml.php CURLOPT_CONNECTTIMEOUT=>15, CURLOPT_TIMEOUT=>40 при зависании этого внешнего сайта *.* нет ответа или что типа этого , виснет вся страница в php с этой фyнкцией внутри! Как избежать такого ? чтоб выполнение происходило независимо получилось или нет связаться с внешней ссылкой а двигаться дальше полюбому! Вроде все прописано выше но останавливается мертво страница и после 40 секунды!
Для начала попробуйте ввести URL 'http://*.*/xml.php в адресную строку браузера. Затем попробуйте проверить ошибки в response см. https://www.php.net/manual/en/function.curl-error.php Удачи!
В дополнение. Бывает, что получив response, его парсят как успешное (по XSLT схеме). Если нет проверки стауса, попытка спарсить неуспешное response закачивается фатальной ошибкой. Вы предполагаете, что виснет cURL, а на самом деле "виснет" парсе, а Вы, возможно, этого не видите. Поэтому обязательно в PHP должен быть включён error_reporting.
@Иван518 в общем случае, надо делать запрос к внешнему сервису асинхронно. то есть выставили задание и вернулись к своим делам. а потом проверяете готовность и принимаете решение считать запрос проваленным или нет. обычно на генерацию страницы у php настроен лимит, например 30 сек. а консольные скрипты без лимита. сие есть великая мудрость! у запроса curl тодже есть свои лимиты времени, после которых он возращает статус ошибки. желательно чтобы твой скрипт не грохнулся раньше чем дождется ответа. при этом реакция на веб-запрос (т.е. генерация странички) должна быть максимально быстрой. иначе сам себе спровоцируешь DoS. пусть проверку статуса долгоиграющего запроса делает JS с уже сгенерированной странички. пусть "пингует" эндпоинт проверки статуса. возможны ещё варианты оповещения через websocket но можно не усложнять стек раньше времени.
Добрый день! В общем случае, может быть, но в каждом конкретном случае это определяется разработчиками Вебсервисов в документации. Например, Вебсервисы агрегаторов отелей. Как праивило, у них предусмотрены запросы на получения статической информации и запросы на поиск номеров и их бронирование. Статическая информации это - коды городов, данные отелей в каждом городе и.т.п Запросы на получения статической информации никак не связаны в конкретным бронированием и могут обработыватся синхронно или асинхронно и результы обработки запросов записываются в БД. Запросы на поиск номеров и их бронирование обрабатываются только синхронно. Поситель сайта вводит критерии поиска и нажимает кнопку "искать". Все, кто бронировал отели онлайн, наверно замечали, что результат поиска выводится через несколько секунд. И ещё один пример. Обычно процесс бронирования или покупки товара заканчивается оплатой. При этом отправлются запросы к платежным сервисам. Эти запросы обрабатываются только асинхронно. На севисах в админ панели клиента определются url на, которые должны отправляться response в случаях успешного завершения транзакций и в противном случае.