Maison >développement back-end >tutoriel php >Comment puis-je affiner efficacement les délais d'attente de curl en PHP pour éviter la résiliation prématurée des requêtes ?
Affiner les délais d'attente de curl en PHP
Dans le domaine de la programmation PHP, rencontrer des réponses lentes de base de données peut être frustrant. Lorsqu’il s’agit de grands ensembles de données, cette lenteur devient encore plus prononcée. Pour lutter contre ce problème, les développeurs s'appuient souvent sur des requêtes curl avec des délais d'attente prolongés.
Considérez l'extrait de code suivant :
$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);
Le problème survient lorsque la requête curl se termine prématurément, malgré le délai d'attente spécifié. . Ce comportement soulève la question de savoir si l'approche est erronée.
La réponse réside dans la compréhension des paramètres nuancés disponibles dans curl. Le paramètre CURLOPT_CONNECTTIMEOUT détermine la durée autorisée pour établir une connexion, tandis que CURLOPT_TIMEOUT définit le temps d'exécution maximum des fonctions curl. Dans ce cas, le problème provient probablement d'une inadéquation entre ces paramètres.
Pour résoudre le problème, ajustez le code comme suit :
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
En définissant CURLOPT_CONNECTTIMEOUT sur 0 (représentant une attente indéfinie ), nous autorisons la connexion sans interruption. Parallèlement, CURLOPT_TIMEOUT est défini sur 400 secondes, ce qui laisse suffisamment de temps pour que la requête soit terminée.
N'oubliez pas que l'allongement du temps d'exécution du script PHP est également crucial :
set_time_limit(0);// to infinity for example
Cela garantit que le script PHP ne se termine pas prématurément, permettant à la requête curl de suivre son cours.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!