Estou executando uma solicitação de curl em um banco de dados eXist através do php. O conjunto de dados é muito grande e, como resultado, o banco de dados leva consistentemente um longo período de tempo para retornar uma resposta XML. Para corrigir isso, configuramos uma solicitação de curvatura, com o que deveria ser um tempo limite longo.
$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);
No entanto, a solicitação de ondulação termina consistentemente antes da conclusão da solicitação (<1000 quando solicitado por um navegador). Alguém sabe se esta é a maneira correta de definir tempos limite em curl?
set_time_limit(0);
se o script está sendo executado no console.php -d max_execution_time=1 -r 'while(true){$r=1*1;}'
ou algo para observar em ação que o cli não possui uma bandeira mágica 'sempre ilimitada'.set_time_limit(0)
se não o estiver usando dentro de um loop.Hmm, parece-me que
CURLOPT_TIMEOUT
define a quantidade de tempo que qualquer função cURL pode levar para executar. Eu acho que você realmente deveria estar olhandoCURLOPT_CONNECTTIMEOUT
, pois isso indica ao cURL a quantidade máxima de tempo para aguardar a conclusão da conexão.fonte
CURLOPT_TIMEOUT
é sobre quanto tempo a função leva, os documentos subjacentes da biblioteca de curl parecem dizer que é sobre quanto tempo a solicitação leva, o que é uma distinção interessante - não tenho certeza de que maneira ler isso!Há uma peculiaridade nisso que pode ser relevante para algumas pessoas ... A partir dos comentários dos documentos do PHP.
De http://www.php.net/manual/en/function.curl-setopt.php#104597
fonte
Seu código define o tempo limite para 1000 segundos . Por milissegundos, use
CURLOPT_TIMEOUT_MS
.fonte
Você precisará garantir o tempo limite entre você e o arquivo. Nesse caso, PHP e Curl.
Para dizer ao Curl para nunca atingir o tempo limite quando uma transferência ainda está ativa, você deve definir
CURLOPT_TIMEOUT
para0
, em vez de1000
.No PHP, novamente, você deve remover os limites de tempo ou o próprio PHP (após 30 segundos por padrão) matará o script conforme a solicitação de Curl. Isso por si só deve corrigir seu problema .
Além disso, se você precisar de integridade dos dados, poderá adicionar uma camada de segurança usando
ignore_user_abort
:Uma desconexão do cliente interromperá a execução do script e possivelmente danificará os dados,
por exemplo. consulta de banco de dados não transitória, criação de um arquivo de configuração, etc., enquanto no seu caso ele baixaria um arquivo parcial ... e você pode ou não se importar com isso.
Respondendo a essa pergunta antiga porque esse segmento está no topo das pesquisas de mecanismo
CURL_TIMEOUT
.fonte
Você não pode executar a solicitação em um navegador, o tempo limite será aguardado até o servidor que está executando a solicitação CURL responder. O navegador provavelmente está atingindo o tempo limite em 1 a 2 minutos, o tempo limite padrão da rede.
Você precisa executá-lo na linha de comando / terminal.
fonte
Se você estiver usando PHP como um aplicativo fastCGI, verifique as configurações de tempo limite do fastCGI. Veja: PHP curl colocar erro 500
fonte