2015-03-23 2 views
2

Мы работаем с webservices, но иногда они не отвечают, они слишком долго реагируют.PHP cURL - ограничение времени выполнения

Как остановить cURL, если требуется более 1 секунды?

Я пробовал:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 1); 

Я также пытался создать «временную страницу» между моим сервером и веб-сервиса: мой сервер вызывает временную страницу с:

set_time_limit(1); 
ini_set('max_execution_time', 1); 

И эта временная страница вызывает сам web-сервис с завитом, но все равно ничего. Если мой веб-сервис имеет время выполнения 10 секунд, мне придется подождать 10 секунд.

Любые идеи?

+1

подход тайма-аута должен быть один, чтобы следовать, так как максимальное время выполнения вы используете в прокси-скрипте имеет в виде только фактическое выполнение сценария, время, затраченные на внешних вызовах не учитывается. Вы можете увидеть это в примечании на странице руководства для функции, которую вы используете http://php.net/set_time_limit – mishu

+0

спасибо за этот ответ. Первое, что я попробовал, тоже не удалось. – d3cima

+1

Если вы используете PHP на сервере unix, попробуйте добавить curl_setopt ($ ch, CURLOPT_NOSIGNAL, 1); – dafyk

ответ

4

Существует лучшее решение.

Setting Curl's Timeout in PHP

См документации: http://www.php.net/manual/en/function.curl-setopt.php

CURLOPT_CONNECTTIMEOUT - количество секунд ожидания при попытке подключения. Используйте 0, чтобы ждать бесконечно.
CURLOPT_TIMEOUT - Максимальное количество секунд для выполнения функций cURL.
curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt ($ ch, CURLOPT_TIMEOUT, 400); // время ожидания в секундах

Также не забудьте увеличить выполнение времени PHP скрипт сам:

set_time_limit (0); // до бесконечности, например


Смежные вопросы