Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Socket_Set_Block, um einen stabilen Daten -Upload -Dienst zu implementieren

Verwenden Sie Socket_Set_Block, um einen stabilen Daten -Upload -Dienst zu implementieren

gitbox 2025-05-26

Praktisches Beispiel: Implementierung eines einfachen Upload -Dienstes basierend auf der Blockierung von Socket

Hier ist ein Beispielcode, der zeigt, wie man Socket_Set_Block verwendet, um den Socket -Eingabemodus einzugeben und Daten zu empfangen, die vom Client hochgeladen wurden.

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

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

// Hören Sie sich die Verbindung an
if (socket_listen($socket, 5) === false) {
    die("Zuhören fehlgeschlagen: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "Warten auf die Kundenverbindung...\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        echo "Die Verbindung nicht akzeptiert: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // Setzen Sie den Blockierungsmodus,Stellen Sie die Stabilität des Datenlesens sicher
    socket_set_block($client);

    $buffer = '';
    while (true) {
        $chunk = socket_read($client, 2048);
        if ($chunk === false || $chunk === '') {
            // Ende oder Fehler lesen
            break;
        }
        $buffer .= $chunk;
    }

    echo "Daten empfangen:\n";
    echo $buffer . "\n";

    socket_close($client);
}

socket_close($socket);
?>

veranschaulichen

  1. Erstellen Sie einen TCP -Socket, um für den lokalen Port 8080 zu hören.

  2. Wenn der Client herstellt, rufen Sie Socket_Set_Block auf, um den Socket auf Block zu setzen.

  3. Im Blockierungsmodus wartet Socket_read auf Daten, bis der Client die Verbindung schließt und sicherstellt, dass die Daten vollständig gelesen werden.

  4. Die Lesedaten werden in $ puffer gespeichert und anschließend verarbeitet.

Diese Methode vermeidet unvollständiges Datenlese oder Verlust in der Mitte und ist die Grundlage für die Implementierung stabiler Upload -Dienste.


Anweisungen zum Ersatz von Domain -Namen

Wenn die hochgeladenen Daten eine URL enthält und der Domänenname in der URL durch gitbox.net ersetzt werden muss, können Sie beispielsweise den regelmäßigen Ersatz für die empfangene Zeichenfolge verwenden:

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

Auf diese Weise können die Domain -Namen aller URLs einheitlich ersetzt werden, um bestimmte Geschäftsanforderungen zu erfüllen.