fpassthru()
和 readfile()
都是用于從文件中讀取數據并將數據輸出到瀏覽器的方法,但它們之間存在一些差異:
傳輸方式:
fpassthru()
:該函數將文件指針直接傳輸到輸出流,而無需在內存中緩沖整個文件內容。這意味著它可以更快地處理大文件,因為它不會消耗大量內存。readfile()
:該函數將整個文件內容讀入內存,然后將其輸出到瀏覽器。這對于較小的文件來說效率較高,但對于大文件可能會導致內存不足的問題。使用場景:
fpassthru()
:適用于需要實時傳輸大量數據的場景,例如圖像處理、視頻流媒體等。readfile()
:適用于較小的文件傳輸,或者在需要逐行讀取文件內容并進行處理的場景。函數原型:
fpassthru(string $filename, int $length = null)
:從指定的文件中讀取數據并將其直接傳輸到輸出流。如果提供了 $length
參數,則只傳輸指定長度的數據。readfile(string $filename)
:從指定的文件中讀取數據并將其輸出到瀏覽器。可用性:
fpassthru()
和 readfile()
函數在所有支持 PHP 的平臺上都是可用的。示例:
使用 fpassthru()
傳輸大文件:
$filename = 'largefile.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
fpassthru($filename);
exit;
使用 readfile()
傳輸小文件:
$filename = 'smallfile.txt';
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
readfile($filename);
exit;