2012-04-25 11 views

risposta

23

Le impostazioni predefinite sono i seguenti:

  • CURLOPT_FTP_RESPONSE_TIMEOUT: Indefinito
  • CURLOPT_TIMEOUT: Indefinito
  • CURLOPT_TIMEOUT_MS: Indefinito
  • CURLOPT_CONNECTTIMEOUT: 300 secondi
  • CURLOPT_CONNECTTIMEOUT_MS: Indefinito
  • CURLOPT_ACCEPTTIMEOUT_MS: 60 secondi

Risposta precedente (per riferimento):

mia comprensione è che CURL obbedisce al default_socket_timeout meno soprascritta da CURLOPT_TIMEOUT/CURLOPT_CONNECTTIMEOUT.

$socket_timeout = ini_get('default_socket_timeout'); // timeout in seconds 
+7

Puoi eseguire il backup? Non ho trovato nulla per dimostrarlo nei binding di curl PHP (https: // github.com/php/php-src/blob/master/ext/riccio/interface.c). Ho anche provato a impostare il mio 'default_socket_timeout' ini su 1 e ho scaricato un file di grandi dimensioni, ma il ricciolo non è mai scaduto, implicando che il valore predefinito di 0 (indefinito) era ancora in uso. Ho quindi impostato in modo esplicito un valore CURLOPT_TIMEOUT di un secondo su un handle di curl, ho provato a scaricare lo stesso file e ho notato che la connessione è stata definitivamente interrotta dopo 1 secondo. –

+5

Il commento di @MichaelDowling fornisce ulteriori informazioni e prove per rispondere a questa domanda. –

+4

Perché questa risposta è contrassegnata come corretta? – jayarjo

73

Dipende dall'impostazione di timeout di cui si sta parlando.

cURL offre varie opzioni specifiche per le impostazioni di timeout della connessione. Alcune di queste opzioni hanno un limite impostato, mentre altre consentono ai trasferimenti di prendere una quantità indefinita di tempo. Al fine di capire quali valori sono impostazioni predefinite e che non si fa, è necessario guardare al curl_easy_setopt() funzione di libcurl: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

libcurl elenca i seguenti timeout di connessione impostazioni specifiche:

  • CURLOPT_FTP_RESPONSE_TIMEOUT: No default (a tempo indeterminato)
  • CURLOPT_TIMEOUT: No default (a tempo indeterminato)
  • CURLOPT_TIMEOUT_MS: No default (a tempo indeterminato)
  • CURLOPT_CONNECTTIMEOUT: Defaults per 300 secondi
  • CURLOPT_CONNECTTIMEOUT_MS: No predefinite
  • CURLOPT_ACCEPTTIMEOUT_MS: Defaults a 60000 ms

Il codice sorgente PHP non sostituisce nessuna delle impostazioni di default di cui sopra: https://github.com/php/php-src/blob/master/ext/curl/interface.c. Il parametro solo in qualche modo correlato che le associazioni di PHP hanno la priorità è CURLOPT_DNS_CACHE_TIMEOUT, cambiando il valore di default da 60 secondi a 120 secondi: https://github.com/php/php-src/blob/a0e3ca1c986681d0136ce4550359ecee2826a80c/ext/curl/interface.c#L1926

Una delle altre risposte ha dichiarato che il PHP imposterà CURLOPT_TIMEOUT al valore specificato nell'impostazione ini default_socket_timeout. Non sono stato in grado di trovare nulla nel codice sorgente di PHP per eseguire il backup di questo reclamo e non sono stato in grado di attivare un timeout CURL scaricando un file molto grande con un'impostazione default_socket_timeout di 1 secondo.

+0

Il timeout predefinito è 0 (zero), il che significa che non scade mai durante il trasferimento. http://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html – diyism

+1

Sì. Questo è nella mia risposta: 'CURLOPT_TIMEOUT: No default (indefinito)' –