Maison >développement back-end >Problème PHP >Comment résoudre le délai d'expiration de l'interface de requête PHP
[Accès HTTP]
Généralement, nous accédons à HTTP de plusieurs manières, principalement : curl, socket, file_get_contents() et d'autres méthodes.
Si le serveur de l'autre partie ne répond jamais, nous serons dans une tragédie. Il est facile de tuer tout le serveur, nous devons donc également prendre en compte le problème du délai d'attente lors de l'accès à http.
[Accès CURL HTTP]
CURL est une bibliothèque lib couramment utilisée et fiable pour accéder à l'interface du protocole HTTP, avec des performances élevées et certaines fonctions de concurrence, etc.
CURL :
curl_setopt($ch, opt) peut définir certains paramètres de délai d'attente, notamment :
CURLOPT_TIMEOUT Set le nombre maximum de secondes pendant lesquelles cURL est autorisé à s'exécuter.
CURLOPT_TIMEOUT_MS définit le nombre maximum de millisecondes pendant lesquelles cURL est autorisé à s'exécuter. (Ajouté dans cURL 7.16.2. Disponible à partir de PHP 5.2.3.)
CURLOPT_CONNECTTIMEOUT Le temps d'attente avant d'initier une connexion S'il est défini sur 0, il attendra infiniment.
CURLOPT_CONNECTTIMEOUT_MS Le temps d'attente pour une tentative de connexion, en millisecondes. S'il est défini sur 0, attendez indéfiniment. Ajouté dans cURL 7.16.2. Disponible à partir de PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT définit l'heure de sauvegarde des informations DNS en mémoire, la valeur par défaut est de 120 secondes.
délai d'expiration normal de deuxième niveau :
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60); //Il vous suffit de définir le nombre de secondes
curl_setopt( $ ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
curl utilisation normale du délai d'attente de deuxième niveau :
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
Si un délai d'attente d'une milliseconde est requis pour curl, vous devez ajouter :
curl_easy_setopt( curl, CURLOPT_NOSIGNAL, 1L ; Un exemple de curl avec un timeout d'une milliseconde :
<?php if (!isset($_GET['foo'])) { // Client $ch = curl_init('http://example.com/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用 $data = curl_exec($ch); $curl_errno = curl_errno($ch); $curl_error = curl_error($ch); curl_close($ch); if ($curl_errno > 0) { echo "cURL Error ($curl_errno): $curl_error\n"; } else { echo "Data received: $data\n"; } } else { // Server sleep(10); echo "Done."; } ?>Quelques autres conseils : Selon l'expérience, le résumé est. : cURL version >= libcurl/7.21. Dans la version 0, le délai d'attente en millisecondes prendra définitivement effet, rappelez-vous.
2. Il y a aussi un problème avec le délai d'attente en millisecondes de curl_multi. . Un seul accès prend en charge le délai d'expiration au niveau MS, et curl_multi sera inexact si plusieurs appels sont effectués en parallèle
[Accès HTTP via le traitement de flux]
En plus de curl , nous le faisons souvent aussi nous-mêmes. Utilisez fsockopen ou la fonction d'opération de fichier pour traiter le protocole HTTP, donc notre traitement du délai d'attente pour cela est également nécessaire. Tutoriel recommandé :Tutoriel vidéo PHP
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!