Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction curl_pause pour suspendre les opérations de téléchargement de fichiers ou de télécharger pour assurer une transmission sûre?

Comment utiliser la fonction curl_pause pour suspendre les opérations de téléchargement de fichiers ou de télécharger pour assurer une transmission sûre?

M66 2025-06-28

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.

Le rôle de curl_pause ()

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

$ 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

Exemple: Pause Download of Files

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&#39;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&#39;é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.

Exemple: pause téléchargement de fichiers

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&#39;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.

Sécurité de transmission améliorée

Combinée à la capacité de curl_pause () , le processus de transmission des données peut être géré plus en toute sécurité:

  1. 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.

  2. Traiter le trafic anormal : pause le comportement anormal détecté ou le modèle de trafic pour réduire les déchets de ressources.

  3. Transmission progressive : pause, transférer et vérifier les fichiers volumineux par lots pour améliorer la stabilité et la tolérance aux pannes.

Résumer

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.