PHPのファイルダウンロード機能で超詳細なプロセス分析を実現_PHPチュートリアル
クライアントがサーバーからファイルをダウンロードするプロセスの分析:
ブラウザーは、サーバー内の特定の Web ページ (down.php など) にアクセスするためのリクエストを送信します。Web ページのコードは次のとおりです。
サーバーはリクエストを受信すると、すぐに down.php ファイルを実行します。
ファイルを実行するときは、ダウンロードするファイルをメモリに読み込む必要があります (ここでは、fopen を介して、Christmas Carnival.jpg の画像を示します)。 ( ) 関数を使用してこのアクションを完了します
注: サーバーからのダウンロードに関連するファイル操作は、まずサーバー側のメモリにファイルを読み取る必要があります
ファイルはすでにメモリ内にあるため、ファイルをfread() 関数はこのアクションを完了します
ファイルが大きい場合は、ファイルが複数のセグメントに分割されてクライアントに返される必要があることに注意してください。ファイルが完全に読み取られるまで待機しません。これによりサーバーの負荷が増加するため、一度サーバーにアクセスしてクライアントに戻ります。
そのため、PHP コードで 1 回読み取るバイト数を設定する必要があります。たとえば、次のコードで $buffer=1024 を介して 1 回読み取るバイト数を設定すると、読み取られるたびにデータが出力されます。は、ブラウザに返されます)
フローチャート:
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
true
http://www.bkjia.com/PHPjc/325568.html
技術記事
クライアントがサーバーからファイルをダウンロードするプロセスの分析: ブラウザーは、サーバー内の特定の Web ページ (down.php など) にアクセスするためのリクエストを送信します。Web ページのコードは次のとおりです。 サーバーが応答します...

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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