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

PHPのファイルダウンロード機能で超詳細なプロセス分析を実現_PHPチュートリアル

Jul 21, 2016 pm 03:18 PM
php ダウンロード 分析する 関数 送信 成し遂げる クライアント 書類 ドキュメントをダウンロード 仕える プロセス ブラウザ 終わり 詳しい 追い越す

クライアントがサーバーからファイルをダウンロードするプロセスの分析:

ブラウザーは、サーバー内の特定の Web ページ (down.php など) にアクセスするためのリクエストを送信します。Web ページのコードは次のとおりです。
サーバーはリクエストを受信すると、すぐに down.php ファイルを実行します。
ファイルを実行するときは、ダウンロードするファイルをメモリに読み込む必要があります (ここでは、fopen を介して、Christmas Carnival.jpg の画像を示します)。 ( ) 関数を使用してこのアクションを完了します
注: サーバーからのダウンロードに関連するファイル操作は、まずサーバー側のメモリにファイルを読み取る必要があります

ファイルはすでにメモリ内にあるため、ファイルをfread() 関数はこのアクションを完了します
ファイルが大きい場合は、ファイルが複数のセグメントに分割されてクライアントに返される必要があることに注意してください。ファイルが完全に読み取られるまで待機しません。これによりサーバーの負荷が増加するため、一度サーバーにアクセスしてクライアントに戻ります。
そのため、PHP コードで 1 回読み取るバイト数を設定する必要があります。たとえば、次のコードで $buffer=1024 を介して 1 回読み取るバイト数を設定すると、読み取られるたびにデータが出力されます。は、ブラウザに返されます)

フローチャート:
PHPのファイルダウンロード機能で超詳細なプロセス分析を実現_PHPチュートリアル

コードをコピー コードは次のとおりです:

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 "そのようなファイルはありません"
}
$fp=fopen($file_path,"r");
/ / ファイルのダウンロードに必要なヘッダー
Header("Content-type: application/octet-stream")
Header("Accept-Length:".$file_size); );
Header("Content-Disposition:attachment; filename=".$file_name);
$buffer=1024;
//while(!feof($fp) && $file_count< ;$file_size){
$file_con=fread($fp,$buffer);
echo $file_con;


;注意すべき点:

header("Content-type:text/html;charset=utf-8") の役割: サーバーがブラウザのリクエストに応答するとき、コンテンツを UTF-8 エンコードで表示するようにブラウザに指示します。 format
について 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) は、バッファーに残っている最後のデータをディスク ファイルに出力し、ファイル ポインターと関連するバッファーを解放できます



http://www.bkjia.com/PHPjc/325568.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/325568.html

技術記事

クライアントがサーバーからファイルをダウンロードするプロセスの分析: ブラウザーは、サーバー内の特定の Web ページ (down.php など) にアクセスするためのリクエストを送信します。Web ページのコードは次のとおりです。 サーバーが応答します...

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? CSSを介してサイズ変更シンボルをカスタマイズし、背景色で均一にする方法は? Apr 05, 2025 pm 02:30 PM

CSSでサイズ変更シンボルをカスタマイズする方法は、背景色で統一されています。毎日の開発では、調整など、ユーザーインターフェイスの詳細をカスタマイズする必要がある状況に遭遇することがよくあります...

PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 Apr 06, 2025 am 12:07 AM

PHPの...(SPLAT)演算子は、機能パラメーターと配列を開梱するために使用され、コードのシンプルさと効率を向上させます。 1)関数パラメーター解放:アレイ要素をパラメーターとして関数に渡します。 2)配列の開梱:アレイを別の配列または関数パラメーターに解除します。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Apr 05, 2025 pm 10:33 PM

最近、Webページにローカルにインストールされたフォントファイルを使用して、インターネットから無料のフォントをダウンロードし、システムに正常にインストールしました。今...

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? フレックスレイアウトの下のテキストは省略されていますが、コンテナは開かれていますか?それを解決する方法は? Apr 05, 2025 pm 11:00 PM

フレックスレイアウトとソリューションの下でのテキストの過度の省略によるコンテナの開口部の問題が使用されます...

ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? ネガティブマージンが場合によっては効果がないのはなぜですか?この問題を解決する方法は? Apr 05, 2025 pm 10:18 PM

なぜマイナスマージンが場合によっては有効にならないのですか?プログラミング中、CSSの負のマージン(負...

See all articles