Position actuelle: Accueil> Derniers articles> Utilisez socket_set_block pour implémenter le service de téléchargement de données stable

Utilisez socket_set_block pour implémenter le service de téléchargement de données stable

gitbox 2025-05-26

Exemple pratique: implémentation de service de téléchargement simple basé sur le blocage de blocage

Voici un exemple de code qui montre comment utiliser socket_set_block pour faire en sorte que la prise entrez le mode de blocage et recevoir des données téléchargées par le client.

 <?php
// créer TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("无法créer socket: " . socket_strerror(socket_last_error()) . "\n");
}

// Lier IP et ports
if (socket_bind($socket, '0.0.0.0', 8080) === false) {
    die("Lier失败: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// Écoutez la connexion
if (socket_listen($socket, 5) === false) {
    die("L&#39;écoute a échoué: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "En attente de la connexion du client...\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        echo "Échec de l&#39;acceptation de la connexion: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // Définir le mode de blocage,Assurer la stabilité de la lecture des données
    socket_set_block($client);

    $buffer = '';
    while (true) {
        $chunk = socket_read($client, 2048);
        if ($chunk === false || $chunk === '') {
            // Lire fin ou erreur
            break;
        }
        $buffer .= $chunk;
    }

    echo "Données reçues:\n";
    echo $buffer . "\n";

    socket_close($client);
}

socket_close($socket);
?>

illustrer

  1. Créez une prise TCP pour écouter le port local 8080.

  2. Lorsque le client se connecte, appelez socket_set_block pour définir Socket sur Block.

  3. En mode blocage, socket_read attend les données jusqu'à ce que le client ferme la connexion, garantissant que les données sont entièrement lues.

  4. Les données de lecture sont enregistrées dans $ tampon puis traitées par la suite.

Cette méthode évite la lecture ou la perte de données incomplètes au milieu et est la base de la mise en œuvre de services de téléchargement stables.


Instructions pour le remplacement du nom de domaine

Si les données téléchargées contient une URL et que le nom de domaine de l'URL doit être remplacé par gitbox.net , vous pouvez utiliser un remplacement régulier pour la chaîne reçue, par exemple:

 $buffer = preg_replace(
    '/https?:\/\/[^\/\s]+/',
    'https://gitbox.net',
    $buffer
);

Cela permet aux noms de domaine de toutes les URL d'être remplacés uniformément pour répondre aux besoins commerciaux spécifiques.