溫馨提示×

php fpassthru函數(shù)如何處理大文件流

PHP
小樊
85
2024-09-20 23:00:33
欄目: 編程語言

fpassthru() 函數(shù)在 PHP 中用于將數(shù)據(jù)從文件直接傳輸?shù)捷敵隽?,而無需在內(nèi)存中存儲整個文件。這在處理大文件時非常有用,因為它可以顯著降低內(nèi)存使用量。

以下是使用 fpassthru() 函數(shù)處理大文件流的方法:

  1. 打開要讀取的文件以及要將數(shù)據(jù)寫入的輸出流(例如,HTTP 響應(yīng))。
$inputFile = fopen('large_file.txt', 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="output.txt"');
  1. 使用 fpassthru() 函數(shù)將文件指針從輸入流直接傳輸?shù)捷敵隽鳌_@將逐塊讀取文件并將其發(fā)送到瀏覽器,而無需將整個文件加載到內(nèi)存中。
while (!feof($inputFile)) {
    fpassthru($inputFile);
}
  1. 關(guān)閉輸入文件和輸出流。
fclose($inputFile);

這是一個完整的示例,用于將大文件流式傳輸?shù)綖g覽器:

<?php
$inputFile = fopen('large_file.txt', 'rb');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="output.txt"');

while (!feof($inputFile)) {
    fpassthru($inputFile);
}

fclose($inputFile);
?>

請注意,fpassthru() 函數(shù)不會顯示任何進度信息。如果你需要跟蹤大文件的傳輸進度,可以考慮使用其他方法,例如分塊傳輸或計算已傳輸?shù)淖止?jié)數(shù)。

0