Intereting Posts
Неустранимая ошибка: require (): Не удалось открыть окно «C: \ wamp \ www \ sep24 \ e / src / functions.php» (include_path = '; C: \ php \ pear') Файлы Bootstrap не загружаются должным образом на других страницах codeigniter Самый быстрый способ получить <title> в PHP Как оператор <=> сравнивает объекты? Индексирование Mysql Group BY Query Разница между интерполяцией (с использованием {} squiggly brackets) и конкатенации (., Или точки) при построении оператора SQL Упростите цикл через массив, который может быть плоским или многомерным Написание изогнутого текста на дуге (PHP) Как отслеживать реальный IP-адрес за прокси-сервером Как вызвать функцию члена класса PHP из файла Java? Доктрина всегда возвращает нулевые значения в производстве Оптимизация запросов доктрины в Sonata Admin с помощью LeftJoin Корзина WooCommerce – проверка категорий условных элементов Symfony2: базовый стол или вид не найдены: 1146 Возможно ли туннель шифрования PHP?

Неверный тайм-аут PHP cURL

Использование curl_setopt() Я установил CURLOPT_CONNECTTIMEOUT_MS на 1000 (1 секунду) и установил еще один скрипт, который спит в течение 5 секунд, затем отвечает 200 OK (используя sleep() ), который я вызываю для целей тестирования. Мой скрипт всегда ждет ответа, хотя он должен давать ошибку тайм-аута cURL.

Как заставить тайм-аут работать как ожидалось и прервать запрос?

 $ch = curl_init($url); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_NOBODY => TRUE, CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, CURLOPT_CONNECTTIMEOUT_MS => 1000, CURLOPT_MAXREDIRS => 5, CURLOPT_USERAGENT => 'Linkit/2.x Drupal/7.x', )); $document = curl_exec($ch); 

Я также попробовал CURLOPT_TIMEOUT_MS а также варианты без суффиксов _MS .

Я использую PHP 5.3.4 с cURL 7.19.7 на OS X 10.6, XAMPP.

CURLOPT_CONNECTTIMEOUT или CURLOPT_CONNECTTIMEOUT_MS определяют максимальное время, которое CURL может предпринять для подключения к серверу, но в вашем случае соединение успешно завершено, поэтому тайм-аут больше не применяется.

Вам нужно использовать CURLOPT_TIMEOUT или CURLOPT_TIMEOUT_MS которые определяют максимальный период времени, в течение которого cURL может выполнить.

Полный список опций, поддерживаемых PHP, смотрите в документации curl_setopt .

Библиотека curl выполняет системный вызов и работает независимо от php (sidenote: поэтому можно использовать многопоточность с завихрением, хотя сам php не поддерживает потоковую обработку). Поэтому, если вы сделаете вызов curl, а затем sleep (), curl все еще работает.

Кроме того, параметр таймаута – это время ожидания ожидания запроса, а не сценарий. Например, если я сделаю запрос curl на google.com, а google.com навсегда отвечает, параметр тайм-аута позволяет мне рассказать, как долго сидеть и ждать ответа google.com.

редактировать:

Хорошо, поэтому вы говорите, что у вас есть скрипт curl, который делает запрос на другой скрипт, и этот скрипт имеет в нем sleep (). Хорошо, ну, параметр curl CURLOPT_CONNECTTIMEOUT (или _MS) должен сказать curl, как долго ждать ответа от запрошенного сервера – как и в случае с соединением. Когда запрос curl сделан, он получает ответ, что соединение было сделано … тогда sleep () просто задерживает вывод, который он дает. Таким образом, в основном, «ждать ответа» – это не то же самое, что «как долго заканчивать выполнение завитка»,

То, что вы хотите использовать, – CURLOPT_TIMEOUT или CURLOPT_TIMEOUT_MS

Ну, у меня была такая же проблема, и я потратил столько времени на поиски решения и нашел рабочее решение в конце.

Хотя я должен поделиться им здесь, и это может быть полезно для кого-то в будущем.

Я просто использовал оба варианта. Я использовал 4 секунды и 8 секунд соответственно.

 curl_setopt($curl_session, CURLOPT_CONNECTTIMEOUT, 4); curl_setopt($curl_session, CURLOPT_TIMEOUT, 8);