Lorsque vous utilisez PHP pour le transfert de données réseau, Curl est un outil très courant et puissant. Que ce soit le téléchargement de fichiers sur un serveur distant ou le téléchargement de fichiers à partir d'un serveur distant, Curl peut fournir des méthodes de contrôle flexibles. Dans certains scénarios d'application, tels que l'interruption temporaire du réseau, en attendant que certains mécanismes de vérification se terminent ou répondent à des événements de sécurité spécifiques, nous voulons suspendre l'opération de téléchargement ou de téléchargement du fichier. La fonction Curl_pause () de PHP fournit de telles capacités.
La fonction curl_pause () est utilisée pour mettre en pause ou reprendre temporairement les flux de données téléchargés ou téléchargés lors d'une session CURL. Ceci est très utile pour des scénarios tels que le contrôle des processus de transmission de données, l'enregistrement des ressources et la réponse aux événements asynchrones.
La définition de la fonction est la suivante:
curl_pause(CurlHandle $handle, int $bitmask): int
Où $ manche est une ressource de session Curl et $ bitmask est un indicateur de contrôle pour la pause / récupération.
Les constantes $ bitmask couramment utilisées comprennent:
Curlpause_recv : pause pour recevoir (télécharger) les données
Curlpause_send : Pause d'envoi (téléchargement) Données
Curlpause_all : pause télécharger et télécharger
Curlpause_cont : récupérer le téléchargement et télécharger
L'exemple suivant montre comment s'arrêter lors du téléchargement du fichier et récupérer après une certaine période de temps.
<?php
$ch = curl_init();
// Définissez l'adresse du fichier à télécharger
curl_setopt($ch, CURLOPT_URL, "https://m66.net/files/testfile.zip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Définissez la fonction de rappel lors de la réception de données
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
static $totalReceived = 0;
$totalReceived += strlen($data);
echo "Received " . $totalReceived . " bytes\n";
if ($totalReceived > 1024 * 100) { // Télécharger plus de100KBFaire une pause après
echo "Pausing download...\n";
curl_pause($ch, CURLPAUSE_RECV);
sleep(5); // Simuler en attente de vérification de sécurité ou de réponse à l'événement
echo "Resuming download...\n";
curl_pause($ch, CURLPAUSE_CONT);
}
return strlen($data);
});
curl_exec($ch);
curl_close($ch);
?>
Dans cet exemple, nous personnalisons la logique de traitement pour la réception des données via Curlopt_WriteFunction , appelons Curl_pause ($ ch, curlpause_recv) pour suspendre la réception après un téléchargement cumulatif de plus de 100 Ko, puis les reprendre par curl_pause ($ ch, curlpause_conte) après 5 secondes.
Si nous utilisons Post pour télécharger un fichier sur le serveur, nous pouvons également le mettre en pause au milieu du téléchargement de manière similaire.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/upload");
curl_setopt($ch, CURLOPT_POST, true);
// Ouvrez le fichier et définissez le champ de téléchargement
$file = fopen("testfile.zip", "r");
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("testfile.zip"));
// Définissez la fonction de rappel pour le téléchargement des données
curl_setopt($ch, CURLOPT_READFUNCTION, function ($ch, $fd, $length) {
static $uploaded = 0;
$chunk = fread($fd, $length);
$uploaded += strlen($chunk);
if ($uploaded > 1024 * 50) { // Télécharger plus de50KBFaire une pause après
echo "Pausing upload...\n";
curl_pause($ch, CURLPAUSE_SEND);
sleep(3); // Le mécanisme de sécurité simulé déclenche ou les retards d'authentification
echo "Resuming upload...\n";
curl_pause($ch, CURLPAUSE_CONT);
}
return $chunk;
});
curl_exec($ch);
fclose($file);
curl_close($ch);
?>
Cet exemple démontre la possibilité de contrôler dynamiquement les progrès de téléchargement pendant le processus de téléchargement. L'interruption temporaire est effectuée après un volume de téléchargement spécifique, laissant le temps de réponse pour le mécanisme de sécurité ou le système externe, puis en continuant à télécharger.
Combinée à la capacité de curl_pause () , le processus de transmission des données peut être géré plus en toute sécurité:
Coopérez avec le processus d'authentification : pause le flux de données avant que le résultat d'authentification ne revienne pour éviter la transmission de données non autorisée.
Traiter le trafic anormal : pause le comportement anormal détecté ou le modèle de trafic pour réduire les déchets de ressources.
Transmission progressive : pause, transférer et vérifier les fichiers volumineux par lots pour améliorer la stabilité et la tolérance aux pannes.
Curl_pause () nous fournit des moyens de contrôle granulaires plus fins, en particulier lors de la construction de systèmes de transmission de données hautement disponibles et contrôlables. En combinant flexiblement les opérations de pause et de récupération, nous pouvons non seulement obtenir un contrôle de transmission plus sûr, mais également optimiser l'utilisation des ressources et améliorer la robustesse du système. La maîtrise de cette fonctionnalité peut permettre aux programmes PHP de répondre plus calmement à divers défis lorsqu'ils sont confrontés à des environnements de réseau complexes.