PHPでは、 FPASSTHRU関数は非常に実用的なファイルストリーミングツールであり、特に写真、ビデオ、ダウンロードなどのクライアントにファイルコンテンツを直接出力するのに適しています。最大の利点は、ファイル全体をメモリに読み取ることなくファイルコンテンツを効率的に転送し、リソースを節約し、メモリオーバーフローの問題を11回にすることです。
この記事では、 FPASSTHRU関数を使用してファイルストリーミングを実装する方法を詳細に紹介し、完全なサンプルコードを組み合わせてすぐに開始できるようにします。
FPASSTHRUはPHPファイル操作の関数であり、機能はファイルの最後まで現在のファイルポインター位置から出力することです。 Fopenと組み合わせてよく使用されます。ファイルを開いた後、ファイルの内容はブラウザに直接出力されます。
関数プロトタイプ:
int fpassthru ( resource $handle )
$ハンドルは、fopen()によって返されるファイルポインターリソースです。
返品値は、バイト出力数です。
ファイルダウンロードインターフェイス
画像またはビデオストリームの出力
ファイルをクライアントに無傷で送信する必要があるシナリオ
ファイルを開きます<br> FOPEN()を使用して、ファイルをバイナリモードで開き、転送されたファイルが文字エンコードの影響を受けないようにします。
正しいHTTPヘッダーを送信します<br> ファイルの種類(ダウンロードされたファイルの場合)に従って、対応するコンテンツタイプ、コンテンツレングス、コンテンツ拡散を送信します。
fpassthruを呼び出してファイルストリームを出力します<br> ファイルコンテンツをクライアントに直接エクスポートします。
ファイルリソースを閉じる<br> リソースの漏れを避けるためにリソースをリリースします。
<?php
// ファイルパス
$filePath = '/path/to/your/file.zip';
// ファイルが存在するかどうかを判断します
if (!file_exists($filePath)) {
header("HTTP/1.1 404 Not Found");
exit("File not found.");
}
// ファイルを開きます
$fp = fopen($filePath, 'rb');
if (!$fp) {
header("HTTP/1.1 500 Internal Server Error");
exit("Failed to open file.");
}
// ファイルサイズを取得します
$fileSize = filesize($filePath);
// 設定 HTTP 頭,ブラウザファイルの種類とサイズを伝えます
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . $fileSize);
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Expires: 0');
// 使用 fpassthru 出力ファイルコンテンツ
fpassthru($fp);
// ファイルリソースを閉じます
fclose($fp);
exit;
?>
fopen($ filepath、 'rb') :バイナリ読み取り専用モードでファイルを開きます。
HTTPヘッダーセットは、ブラウザがファイルの種類とサイズを認識し、コンテンツ拡散がダウンロードされたファイルのデフォルト名を指定することを保証します。
fpassthru($ fp)は、ファイルの現在の位置からファイルの最後まで直接すべてのデータを出力します。
ファイルのハンドルを閉じて終了して、冗長コンテンツが出力されないようにします。
ファイルが大きい場合、 FasSthruはすべてのファイルをメモリに読み取らないため、それを転送する効率的な方法です。
転送する前に適切なHTTPヘッダーを送信して、ブラウザがファイルを正しく処理することを確認してください。
ファイルパスがユーザー入力から来る場合は、パス交差などのセキュリティリスクを防ぐために、セキュリティ確認を実行してください。
ブレークポイントの連続伝送をサポートするダウンロード要件には、追加のhttp_rangeヘッダーが必要であり、この記事では詳細に説明しません。
上記の手順を通じて、PHPのFPASSTHRU関数を簡単に使用して、効率的なファイルストリーミングを実現できます。簡潔なコードと優れたパフォーマンスを備えた、あらゆる種類のファイルのダウンロードおよびストリーミングメディア出力シナリオに適しています。
ファイルのダウンロードインターフェイスまたはメディアストリーミングサービスを作成する必要がある場合は、 FPASSTHRUを試してみることもできます。これにより、コードがより簡潔で効率的になります。