In PHP ist Breakpoint Continuation eine häufigste Anforderung bei der Verarbeitung von Datei -Downloads. Damit kann der Benutzer nach dem Download-Prozess weiterhin vom unterbrochenen Standort heruntergeladen werden und vermeiden, dass die gesamte Datei erneut heruntergeladen wird. Normalerweise liegt der Schlüssel zur Implementierung der kontinuierlichen Übertragung von Haltepunkten in der Verarbeitung von HTTP -Headern und der Unterstützung des Servers für Bereichsanforderungen.
Können also Stream_Context_set_params verwendet werden, um die kontinuierliche Übertragung von Datei -Breakpoint zu implementieren? Wie konfiguriere ich es?
Stream_Context_set_params ist eine Funktion, die in PHP verwendet wird, um Parameter für vorhandene Stream -Kontexte festzulegen. Es wird häufig verwendet, um das Verhalten von Streams wie Timeouts, Benachrichtigungsrückrufe usw. anzupassen. Das Nutzungsformular lautet:
stream_context_set_params(resource $stream_context, array $params): bool
Parameter können umfassen:
Benachrichtigung : Legen Sie die Rückruffunktion fest
Timeout : Stellen Sie die Zeitüberschreitungszeit fest (Sekunden)
Blockierung : Ob der Fluss blockiert werden soll
Die Implementierung des Breakpoint Continuous -Transmissions stützt sich hauptsächlich auf den Bereichsheader im HTTP -Protokoll, und der Server gibt Daten im entsprechenden Byte -Bereich basierend auf dem Anforderungsheader zurück. Zum Beispiel:
Range: bytes=1000-
Zeigt an, dass der Kunde mit dem Herunterladen von Byte 1000 beginnen möchte.
Nach Erhalt einer solchen Anforderung gibt der Server den teilweisen Inhalt der Statuscode 206 zurück und bringt Inhaltsbereich in den Antwortheader ein, um dem Client mitzuteilen, welcher Teil der Datei zurückgegeben wurde.
Streng genommen ist stream_context_set_params selbst nicht so konzipiert, dass sie HTTP -Header verarbeiten. Es wird verwendet, um Stream -Parameter festzulegen. Es kann nicht direkt verwendet werden, um den Bereich im HTTP-Anforderungsheader zu konfigurieren, und es kann auch nicht den serverseitigen Antwortstatuscode und den segmentierten Getriebe verarbeiten.
Wenn Sie eine HTTP -Anforderung in PHP initiieren möchten, die die kontinuierliche Übertragung von Breakpoint unterstützt, sollten Sie mit der HTTP -Option Stream_Context_create verwenden, um den Anforderungsheader festzulegen, z. B.:
$options = [
'http' => [
'method' => 'GET',
'header' => "Range: bytes=1000-\r\n",
]
];
$context = stream_context_create($options);
$file = file_get_contents('http://m66.net/path/to/file', false, $context);
Auf diese Weise kann der Client beantragen, dass die Datei aus den angegebenen Bytes heruntergeladen wird.
<?php
$start = 1000; // Aus1000Bytes beginnen mit dem Herunterladen
$options = [
'http' => [
'method' => 'GET',
'header' => "Range: bytes=$start-\r\n",
'ignore_errors' => true, // Empfangen erlauben 206 Antwort
]
];
$context = stream_context_create($options);
$url = 'http://m66.net/path/to/largefile.zip';
$fileContent = file_get_contents($url, false, $context);
// Kann $fileContent An vorhandene Dateien anhängen,Kontinuierliche Übertragung implementieren und verschmelzen
file_put_contents('localfile.zip', $fileContent, FILE_APPEND);
?>
Im obigen Beispiel liegt der Fokus darauf, den Bereich in der HTTP -Option den Bereich durch den Header hinzuzufügen, um den Server einen Teil des Inhalts zurückzugeben. Stream_Context_set_params wird nicht verwendet, da es nicht für die Festlegung des Anforderungsheaders verantwortlich ist.
Der Client initiiert eine Anfrage mit einem Bereich nur den ersten Schritt, mit dem der Haltepunkt fortgesetzt wird, und der Server muss auf Anfragen mit einem Bereich korrekt unterstützen und auf Anfragen reagieren.
Der Server muss den statuscode 206 teilweise Inhalt zurückgeben
Der Server muss den Header des Inhaltsbereichs korrekt festlegen
Der Server unterstützt das Lesen von Dateien des Haltepunkts
Wenn der Server dies nicht unterstützt, fordert der Client den Bereichsheader an und gibt dennoch die gesamte Datei zurück.
Stream_context_set_params wird hauptsächlich zum Festlegen von Stream -Parametern verwendet, um HTTP -Anforderungsheader nicht festzulegen und kann die kontinuierliche Übertragung von Breakpoint nicht direkt implementieren.
Um die kontinuierliche Übertragung von Haltepunkten zu implementieren, sollten Sie Stream_Context_create verwenden und den Bereich der Bereichsanforderung in der Option HTTP festlegen.
Der Server muss auch die Bereichsanforderungen für Haltepunkte korrekt unterstützen.
In Kombination mit der Funktion "PHP -Dateioperation" kann die Client Breakpoint Continuous -Datei -Download -Funktion realisiert werden.