Я запускаю запрос curl для базы данных eXist через php. Набор данных очень большой, и, как следствие, базе данных постоянно требуется много времени для возврата XML-ответа. Чтобы исправить это, мы настроили запрос curl, который должен быть долгим.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
Тем не менее, запрос curl последовательно завершается до его завершения (<1000 при запросе через браузер). Кто-нибудь знает, это правильный способ установить таймауты в curl?
set_time_limit(0);
если скрипт работает на консоли.php -d max_execution_time=1 -r 'while(true){$r=1*1;}'
или что-то, чтобы наблюдать в действии, что у cli нет волшебного флага «всегда неограничен».set_time_limit(0)
если вы не используете его внутри цикла.Хм, похоже, он
CURLOPT_TIMEOUT
определяет количество времени, которое любая функция cURL может занять для выполнения. Я думаю, что вы должны смотретьCURLOPT_CONNECTTIMEOUT
вместо этого, так как это говорит cURL максимальное количество времени ожидания для завершения соединения.источник
CURLOPT_TIMEOUT
о том, сколько времени занимает функция, базовые документы библиотеки curl, похоже, говорят о том, сколько времени занимает запрос, что является интересным отличием - не уверен, каким способом это читать!Есть странная вещь, которая может иметь отношение к некоторым людям ... Из комментариев к документам PHP.
От http://www.php.net/manual/en/function.curl-setopt.php#104597
источник
Ваш код устанавливает время ожидания до 1000 секунд . Для миллисекунд, используйте
CURLOPT_TIMEOUT_MS
.источник
Вам нужно будет убедиться в тайм-аутах между вами и файлом. В этом случае PHP и Curl.
Сказать Curl , чтобы никогда не тайм - аут , когда передача все еще активна, вам нужно установить
CURLOPT_TIMEOUT
на0
, вместо1000
.В PHP, опять же, вы должны удалить временные ограничения или PHP сам по себе (через 30 секунд по умолчанию) уничтожит скрипт по запросу Curl. Это само по себе должно решить вашу проблему .
Кроме того, если вам требуется целостность данных, вы можете добавить уровень безопасности, используя
ignore_user_abort
:Отключение клиента прерывает выполнение скрипта и может повредить данные,
например. непереходный запрос к базе данных, создание файла конфигурации, и т. д., в то время как в вашем случае он будет загружать частичный файл ... и вы можете, или нет, заботиться об этом.
Отвечая на этот старый вопрос, потому что эта тема находится вверху поисковиков
CURL_TIMEOUT
.источник
Вы не можете запустить запрос из браузера, он будет ждать по истечении времени ожидания ответа сервера CURL. Вероятно, время ожидания браузера составляет 1-2 минуты, по умолчанию время ожидания сети.
Вам нужно запустить его из командной строки / терминала.
источник
Если вы используете PHP в качестве приложения fastCGI, то обязательно проверьте настройки тайм-аута fastCGI. Смотрите: PHP curl put 500 error
источник