ホームページ >バックエンド開発 >PHPチュートリアル >PHPでのファイルダウンロードの詳細なプロセス分析

PHPでのファイルダウンロードの詳細なプロセス分析

WBOY
WBOYオリジナル
2016-07-25 08:58:45975ブラウズ
  1. header("Content-type:text/html;charset=utf-8");
  2. // $file_name="cookie.jpg"
  3. $file_name="クリスマス カーニバル.jpg ";
  4. //中国語が表示できない問題を解決するには
  5. $file_name=iconv("utf-8","gb2312",$file_name);
  6. $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy /down/down/";
  7. $file_path=$file_sub_path.$file_name;
  8. //まず、指定されたファイルが存在するかどうかを判断します
  9. if(!file_exists($file_path)){
  10. echo "そのようなファイルはありません";
  11. return ;
  12. }
  13. $fp=fopen($file_path,"r");
  14. $file_size=filesize($file_path);
  15. //ファイルのダウンロードに必要なヘッダー
  16. Header("Content-type: application/octet -stream) ");
  17. Header("Accept-Range: バイト");
  18. Header("Accept-Length:".$file_size);
  19. Header("Content-Disposition:attachment; filename=".$file_name);
  20. $buffer=1024;
  21. $file_count=0;
  22. //データをブラウザに返す
  23. while(!feof($fp) && $file_count<$file_size){
  24. $file_con=fread($fp,$buffer); $file_count+=$buffer;
  25. echo $file_con;
  26. fclose($fp)?>
  27. 注: 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 までご連絡ください。