Web開発では、ファイルのダウンロードは、特に管理システムまたはファイル配布プラットフォームでの一般的な機能の1つです。ファイルのダウンロードのコア原則は次のとおりです。サーバーはターゲットファイルコンテンツを読み取り、HTTPプロトコルを介してクライアントに送信し、ローカルファイルとして保存します。
プロセス全体が主に2つの段階に分割されます。
PHPの組み込みreadfile()関数は、ファイルのダウンロード機能を簡単に実装できます。以下は基本的な実装コードです。
$file = 'path/to/file'; // ダウンロードするファイルパス
$filename = basename($file); // ファイル名を取得します
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
上記のコードで:
異常な状況を避けるために、ファイルのダウンロード機能を実装する場合、次のポイントに注意する必要があります。
__dir__定数を使用して、ファイルパスが正しいことを確認してください。
$file = __DIR__ . '/path/to/file'; // 絶対パスを使用します
mime_content_type()関数を使用して、ファイルタイプを自動的に識別して設定できます。
$file = 'path/to/file';
$mime = mime_content_type($file); // 得るMIMEタイプ
header('Content-Type: ' . $mime);
ファイル名に中国語またはスペースが含まれている場合、 urlencode()を使用してファイル名をエンコードできます。
$file = 'ファイル名.txt';
$filename = urlencode($file);
header('Content-Disposition: attachment; filename=' . $filename);
PHPのReadFile関数と関連するHTTPヘッダー情報設定により、信頼できるファイルのダウンロード機能を簡単に実現できます。開発者は、送信プロセスが安全で効率的で優れた互換性を確保するために、練習中にファイルパス、MIMEタイプ、ファイル名エンコードなどの詳細に特別な注意を払う必要があります。上記の方法は、ほとんどのPHPプロジェクトのファイルダウンロードシナリオに適しており、汎用性が良好です。