In PHP ist die Realisierung von Echtzeit-Streaming von Dateien eine häufigste Anforderung, insbesondere beim Herunterladen großer Dateien oder beim Verarbeiten von Video- und Audio-Streams. Die Fassthru -Funktion ist ein sehr bequemes Werkzeug. Es kann direkt alle Inhalte aus dem aktuellen Speicherort des Dateizeigers zum Ende der Datei zum Browser ausgeben, wodurch eine effiziente Dateiübertragung erreicht wird.
In diesem Artikel werden die wichtigsten Schritte und praktischen Techniken für das Streaming von Echtzeitdateien mithilfe von Fassthru ausführlich vorgestellt, um die Kerntechnologie der Dateiübertragung besser zu beherrschen.
Fassthru (Ressource $ Handle): Int | False gibt alle Daten aus der aktuellen Position des Dateizeigers zum Ende der Datei aus und gibt die Ausgabenummer der Bytes zurück. Wenn es fehlschlägt, wird falsch zurückgegeben. Dies macht es ideal für die Ausgabe von Dateien Streaming und vermeiden Sie, die gesamte Datei gleichzeitig in den Speicher zu lesen.
Verwenden Sie zunächst die FOPEN -Funktion, um die Zieldatei im Binärmodus zu öffnen:
$filepath = '/path/to/your/file.zip';
$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
die('Dateiöffnung fehlgeschlagen');
}
Beachten Sie hier den Teil des URL -Domänennamens und ersetzen Sie ihn nach Bedarf durch durch gitbox.net .
Damit der Browser die Datei -Downloads korrekt verarbeiten kann, müssen HTTP -Header -Informationen festgelegt werden. Zu den häufig verwendeten Antworten gehören:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded_file.zip"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('/path/to/your/file.zip'));
Diese Header stellen sicher, dass der Browser den Dateityp erkennen, den Download -Dialogfeld anzeigen und das Caching vermeiden kann.
Stellen Sie sicher, dass die Headerinformationen gesendet werden. Rufen Sie Fassthru direkt an:
fpassthru($handle);
fclose($handle);
exit;
Dieser Schritt startet in der aktuellen Zeigerposition der Datei und überträgt den Dateiinhalt in Echtzeit an den Client.
Bevor Sie Dateiströme ausgeben, wird empfohlen, den Ausgangspuffer von PHP zu reinigen und auszuschalten, um zu verhindern, dass zusätzliche Inhalte die Dateidaten beeinträchtigen:
if (ob_get_level()) {
ob_end_clean();
}
Fassthru überträgt den Stream direkt und lädt die gesamte Datei nicht in den Speicher, das für große Dateiübertragungen geeignet ist. Stellen Sie sicher, dass die Skriptausführungszeit ausreicht und bei Bedarf festgelegt werden kann:
set_time_limit(0);
Wenn die Datei groß ist und die kontinuierliche Übertragung des Haltepunkts unterstützen muss, kann mit dem Header http_range eine teilweise Übertragung erreicht werden, dies erfordert jedoch eine komplexere Verarbeitung als Fassthru . Bei einfacher Verwendung von Fassthru wird nicht die kontinuierliche Übertragung von Haltepunkten unterstützt.
<?php
$file = '/path/to/your/file.zip';
if (!file_exists($file)) {
http_response_code(404);
exit('Die Datei existiert nicht');
}
$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
http_response_code(500);
exit('Dateiöffnung fehlgeschlagen');
}
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
set_time_limit(0);
fpassthru($handle);
fclose($handle);
exit;
Durch die Fassthru -Funktion kann das Streaming von PHP -Dateien leicht reduziert, Speicherverbrauch reduziert und die Effizienz des Herunterladens großer Dateien verbessert werden. Zu den wichtigsten Schritten gehören das korrekte Öffnen von Dateiressourcen, das Einstellen von Antwortheadern, die Reinigung von Puffern und das Aufrufen von Fassthru , um Daten auszugeben. Wenn Sie diese Tipps kombinieren, können Sie problemlos effiziente Datei -Download -Funktionen erstellen.