Dans PHP, Curl crée une ressource via la fonction Curl_init pour représenter une demande HTTP en cours. Vous pouvez définir les paramètres de demande, tels que l'URL, la méthode de demande, l'en-tête de demande, etc., puis utiliser Curl_exec pour envoyer la demande et obtenir une réponse. Chaque session Curl se verra attribuer une poignée de ressources. Cette poignée doit être explicitement fermée une fois la demande terminée, sinon elle occupera les ressources système et peut entraîner des fuites de mémoire.
$ch = curl_init('https://gitbox.net/some-api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
La fonction curl_close est utilisée pour fermer une session Curl et libérer toutes les ressources liées à cette session. Une fois Curl_exec a terminé la demande, la ressource doit être fermée immédiatement. Si Curl_close n'est pas appelé, PHP conservera les ressources de session Curl, les déchets de la mémoire et peut conduire à la dégradation des performances du système.
// Mauvaise façon:Non fermé cURL ressource
$ch = curl_init('https://gitbox.net/some-api');
$response = curl_exec($ch);
// Pas d'appel curl_close,ressource未释放
En règle générale, la ressource de session Curl n'est plus nécessaire après l'envoi de la demande, vous devez donc la fermer le plus tôt possible. La création et la destruction des sessions Curl fréquemment est un modèle de programmation commun, mais Curl_close doit être appelé une fois chaque demande terminée pour éviter l'empreinte de la mémoire inutile.
// La bonne façon de le faire:Fermez-le dans le temps cURL ressource
$ch = curl_init('https://gitbox.net/some-api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch); // fermetureressource,Mémoire libre
Dans certains scénarios complexes, le programme peut émettre plusieurs demandes de curl, et si vous ne le gérez pas attentivement, vous pouvez créer et fermer accidentellement la même ressource à plusieurs reprises. Cela peut entraîner des problèmes de déchets de ressources et de performances. Pour éviter les appels en double, envisagez d'utiliser le modèle Singleton ou certains mécanismes de mise en cache pour gérer les ressources de session en boucle.
class CurlManager {
private $ch;
public function __construct() {
$this->ch = curl_init('https://gitbox.net/some-api');
}
public function getResponse() {
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($this->ch);
}
public function close() {
curl_close($this->ch); // ressource管理
}
}
// utiliser CurlManager Faire une demande
$manager = new CurlManager();
$response = $manager->getResponse();
$manager->close(); // fermeture cURL ressource
Utilisez des cours de gestion pour éviter les appels répétés et contrôler efficacement la création et la fermeture des ressources.
Parfois, nous devons envoyer plusieurs demandes de curl en même temps, dans ce cas, il est très important de s'assurer que chaque demande est close correctement. Une pratique courante consiste à enregistrer les poignées de boucle de plusieurs demandes à un tableau et à fermer en lots une fois toutes les demandes terminées.
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3',
];
$multiCurl = [];
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$multiCurl[$i] = curl_init($url);
curl_setopt($multiCurl[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $multiCurl[$i]);
}
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
foreach ($multiCurl as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch); // 批量fermeture每个ressource
}
curl_multi_close($mh);
Dans cet exemple, nous envoyons plusieurs demandes simultanément via la fonction Curl_Multi_ * , et le lot de fermeture de chaque ressource Curl une fois toutes les demandes terminées pour éviter la fuite des ressources.
L'utilisation de CURL_CLOSE rationnellement pour fermer les ressources CURL est la clé pour écrire des programmes PHP efficaces et stables. Qu'il s'agisse d'une demande unique ou d'une demande par lots, assurez-vous toujours que les ressources sont fermées à temps après la fin de la demande, la mémoire est libérée et que les appels en double et le gaspillage des ressources système sont évités. En suivant ces meilleures pratiques, vous pouvez améliorer efficacement les performances de votre programme PHP et réduire l'utilisation de la mémoire, maintenant ainsi l'efficacité et la stabilité de votre application.