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 ?

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 ?

DDD
DDDoriginal
2024-12-27 03:20:09693parcourir

How Can I Effectively Fine-Tune Curl Timeouts in PHP to Avoid Premature Request Termination?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn