PHPでのファイルダウンロードの詳細なプロセス分析
リリース: 2016-07-25 08:58:45
-
- 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) は、バッファー内に最後に残ったデータをディスク ファイルに出力し、ファイル ポインターと関連バッファーを解放できます。
|
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31