Curl est un outil puissant en PHP pour les demandes d'URL. En utilisant CURL, nous pouvons communiquer avec différents serveurs, effectuer Get, publier des demandes, télécharger des fichiers, soumettre des données de formulaire, etc. Curl utilise une session (session) pour gérer les connexions et les ressources demandées. Habituellement, nous initialisons une session via curl_init () et la clôturons via curl_close () .
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
Dans le code ci-dessus, nous initialisons et fermons la session Curl à chaque fois que nous envoyons une demande. Bien que cela soit bien pour une seule demande, l'initialisation et l'arrêt fréquents de la session peuvent affecter les performances lorsque nous devons envoyer un grand nombre de demandes.
Chaque fois que Curl_Init () est appelé, PHP alloue une nouvelle mémoire et initialise les ressources pertinentes. Et chaque fois que Curl_close () est appelé, ces ressources seront publiées. L'exécution fréquente de ces opérations peut être particulièrement inefficace pour plusieurs demandes, en particulier dans des environnements de concurrence élevés, où l'initialisation et les arrêts répétés peuvent augmenter la charge du système.
// Initialiser et fermer les séances plusieurs fois
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch1);
curl_close($ch1);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch2);
curl_close($ch2);
Le code ci-dessus exécute curl_init () et curl_close () entre chaque demande, ce qui gaspille le temps et la mémoire lors de la gestion de plusieurs demandes.
Pour améliorer l'efficacité du code, nous pouvons utiliser une session Curl à long terme. Dans cette approche, nous n'avons besoin d'initialiser la session Curl qu'une seule fois, puis de modifier dynamiquement l'URL demandée et d'autres paramètres via Curl_setopt () sans réinitialiser à chaque fois.
Nous pouvons conserver la ressource Curl dans une boucle et mettre à jour uniquement l'URL et d'autres options avant chaque demande. Cette méthode réduit considérablement le nombre d'appels à curl_init () et curl_close () , améliorant ainsi l'efficacité.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// La première demande
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch);
// La deuxième demande
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch);
curl_close($ch);
Dans le code ci-dessus, nous n'avons appelé que Curl_Init () et Curl_close () , et l'URL a été modifiée dynamiquement via Curl_setopt () . Cette méthode évite l'initialisation et la fermeture répétées de la session et améliore l'efficacité du code.
Si vous devez envoyer un grand nombre de demandes, la fonction Curl_Multi_ * de PHP peut vous aider à envoyer plusieurs demandes en même temps, améliorant encore l'efficacité. curl_multi_init () peut initialiser une ressource Curl multiple, vous permettant d'envoyer plusieurs demandes en parallèle sans ouvrir et clôturer fréquemment des sessions Curl distinctes.
// initialisation cURL Séances de lots
$mh = curl_multi_init();
// Créer plusieurs cURL Session
$ch1 = curl_init("https://gitbox.net/api/endpoint1");
$ch2 = curl_init("https://gitbox.net/api/endpoint2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// 将Session添加到Séances de lots中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// Effectuer des demandes de lots
do {
$status = curl_multi_exec($mh, $active);
} while ($status == CURLM_CALL_MULTI_PERFORM || $active);
// Obtenir une réponse
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// fermeture cURL Session
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
En utilisant la fonction Curl_Multi_ * , vous pouvez envoyer plusieurs demandes en même temps sans initialiser et fermer une session Curl à chaque fois. Cela améliore non seulement l'efficacité, mais vous permet également de traiter plusieurs demandes en même temps, ce qui réduit considérablement le temps d'attente.
En évitant d'appeler curl_init () et curl_close () dans chaque demande et en utilisant des connexions longues ou des demandes de lots à la place, nous pouvons améliorer efficacement l'efficacité d'exécution de notre code. Surtout lorsqu'un grand nombre de demandes sont nécessaires, en utilisant la fonction Curl_Multi_ * peut accélérer l'ensemble du processus et réduire la consommation de ressources.
Avec ces méthodes, vous pouvez optimiser considérablement les performances lors de l'envoi de demandes HTTP à l'aide de Curl et de poser une base solide pour une programmation PHP efficace.