-
- header("Content-type:text/html;charset=utf-8");
- // $file_name="cookie.jpg"
- $file_name="クリスマス カーニバル.jpg ";
- //中国語が表示できない問題を解決するには
- $file_name=iconv("utf-8","gb2312",$file_name);
- $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy /down/down/";
- $file_path=$file_sub_path.$file_name;
- //まず、指定されたファイルが存在するかどうかを判断します
- if(!file_exists($file_path)){
- echo "そのようなファイルはありません";
- return ;
- }
- $fp=fopen($file_path,"r");
- $file_size=filesize($file_path);
- //ファイルのダウンロードに必要なヘッダー
- Header("Content-type: application/octet -stream) ");
- Header("Accept-Range: バイト");
- Header("Accept-Length:".$file_size);
- Header("Content-Disposition:attachment; filename=".$file_name);
- $buffer=1024;
- $file_count=0;
- //データをブラウザに返す
- while(!feof($fp) && $file_count<$file_size){
- $file_con=fread($fp,$buffer); $file_count+=$buffer;
- echo $file_con;
- fclose($fp)?>
-
-
-
- 注:
header("Content-type:text/html;charset=utf-8") の役割: サーバーがブラウザのリクエストに応答するとき、コンテンツを UTF-8 エンコーディングで表示するようにブラウザに指示します。
file_exists() 関数が中国語のパスをサポートしていない問題について: PHP 関数は比較的初期のもので中国語をサポートしていないため、ダウンロードしたファイル名が中国語の場合は文字エンコードを変換する必要があり、そうでない場合は file_exists( ) 関数はそれを認識できません。エンコード変換には iconv() 関数を使用できます。
$file_sub_path() 相対パスよりも効率的な絶対パスを使用します。
Header("Content-type: application/octet-stream") の役割: このコードを通じて、クライアントのブラウザはサーバーから返されたファイル形式を知ることができます。
Header("Accept-Ranges: bytes") の役割: ブラウザーから返されるファイル サイズがバイト単位で計算されることをクライアントに伝えます。
Header("Accept-Length:".$file_size) の役割: ブラウザに返されるファイルのサイズを通知します。
Header("Content-Disposition:attachment;filename=".$file_name)" の役割: 返されたファイルの名前をブラウザーに伝えます。
上記の 4 つの Header() が必要です
fclose($fp) は、バッファー内に最後に残ったデータをディスク ファイルに出力し、ファイル ポインターと関連バッファーを解放できます。
|