目次
1. " >1.
2. 原則" > 2. 原則
4.解决header实现文件下载时文件过大导致卡死的问题" >4.解决header实现文件下载时文件过大导致卡死的问题
ホームページ バックエンド開発 PHPチュートリアル PHP はデータを 1 行ずつ出力し、バッファリングに関連する 2 つの一般的な問題を解決します

PHP はデータを 1 行ずつ出力し、バッファリングに関連する 2 つの一般的な問題を解決します

Jun 13, 2016 pm 12:14 PM
data echo quot

PHP はデータを 1 行ずつ出力し、2 つの一般的なバッファリングの問題を解決します

このブロガーは、さまざまなインターネット技術に熱心で、しばしば強迫性障害を伴います。頻繁に更新しており、その記事が正しいと思われる場合は、フォローしてください。 「Dark Blue Sickle」と明記してください


1.

次の 2 つの状況に遭遇したことがあるのではないでしょうか:

  1. 上司は、データベース内のすべてのデータをブラウザに表示するよう求めています。データを比較する必要があるため、ページネーションは使用できないと要求しています。それでは、出力してください。ループ内で 1,000 個のデータを直接出力するのは問題ありませんが、データが数百万個ある場合はどうなるでしょうか?ブラウザがすぐにフリーズしてしまい、席を立ってコーヒーを飲みに行ったり、トイレに行ったりして、受付の人と長時間雑談をしていると、戻ってくるとブラウザが「プログラムが応答していません」と表示されます。どうすればいいでしょうか?
  2. 上司から、Web サイトのダウンロード リンクを改善するよう依頼されました。ファイルをダウンロードするにはマウスを直接左クリックする必要があります (一部のファイル タイプでは、直接左クリックするとファイルが開きます。多くの Web サイトでは、「右クリックして名前を付けて保存」するよう求められます)。header 関数と readfile 関数を使用してこれを簡単に実装しました。しかし、オンラインにアクセスした後、ファイルが大きすぎるとブラウザがスタックしてしまうことがわかりました。今度は上司がコーヒーを奢ろうとしているのですが、どうすればよいでしょうか?

上記の 2 つの状況に遭遇した場合、または将来そのような問題に直面する可能性がある場合は、次回すぐに解決できるようにマークを付けることができます。


2. 原則


仕事に戻ります。


以下は PHP 出力制御の壮大な紹介です 出力バッファ


まず、次のコードの効果を試してください


<?phpif (ob_get_level() == 0){ ob_start() }else{ exit(0);};//开始缓冲for ($i = 0; $i<10; $i++){    echo "Line to show.\n<br />";//不直接输出,先存入缓冲区中    ob_flush();//将缓冲区的数据输出出来    flush();//将缓冲区的数据输出出来    sleep(2);//暂停两秒}echo "Done.";ob_end_flush();//关闭并清理缓冲区
ログイン後にコピー

PHP にもこのような遅延読み込み機能が実装できるとは思いませんでした ですね。素晴らしい?


原則として、PHP はデータを出力する前にデータを バッファ に入れて待機します。必要に応じてバッファリングされたデータ。これを Cache と混同しないように注意してください。


これの利点は、一方では遅延読み込みと同様の優れた効果を実現できることですが、他方では、サーバーとクライアントの負荷を軽減しないと、出力に大きなデータがある場合、メモリが不足します。


注: ob_flush() および flush( ) はバッファ データをフラッシュするために使用されますが、公式の推奨事項は と組み合わせて使用​​することです。これは、ほとんどの Web サーバーでは ob_flush() のみが実行できるためですバッファをフラッシュしますが、Apache などの一部のケースでは、flush() を呼び出す必要がある場合があるため、コードの 移植性を確保するために、 は ob_flush()すぐにflush()を最後に追加します。


原理がわかったので、最初に述べた 2 つの問題を解いてみましょう。


3. 単一ページ内の数百万のデータの出力がスタックする問題を解決する

<?phpob_start();$data = [1,2,3,4,5,6,7,8,9,10];//实际数据更多,为方便距离假设浏览器一次输出10条会卡死$per = 3;//每次输出3条,可以改成1000 for ($i = 0;$i < count($data); $i+= $per){    for($j = $i; $j < $i + $per && $j <count($data); $j++){        echo $data[$j];    }    ob_flush();    flush();    sleep(2);}echo "Done.";ob_end_flush();
ログイン後にコピー


4.解决header实现文件下载时文件过大导致卡死的问题

<?phpheader('Content-type: application/txt');//输出类型ob_start();$data = "qwertyuioasdfghjkl";//文件内容,file_get_contents($file)$per = 15;//每次输出15个字符,可以改成1000或更大 for ($i = 0;$i < strlen($data); $i+= $per){    for($j = $i; $j < $i + $per && $j <strlen($data); $j++){        echo $data[$j];    }    sleep(2);    ob_flush();    flush();}echo "Done.";     ob_end_flush(); 
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト Jan 30, 2024 am 09:08 AM

今日の急速な技術発展の時代では、雨後の筍のようにプログラミング言語が出現しています。多くの注目を集めている言語の 1 つは Go 言語です。Go 言語は、そのシンプルさ、効率性、同時実行の安全性などの機能により多くの開発者に愛されています。 Go 言語は、多くの優れたオープンソース プロジェクトがある強力なエコシステムで知られています。この記事では、厳選された 5 つの Go 言語オープンソース プロジェクトを紹介し、読者を Go 言語オープンソース プロジェクトの世界へ導きます。 KubernetesKubernetes は、自動化されたオープンソースのコンテナ オーケストレーション エンジンです。

Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Mar 24, 2024 pm 01:15 PM

「Go 言語開発の要点: 5 つの人気フレームワークの推奨事項」 高速で効率的なプログラミング言語として、Go 言語はますます多くの開発者に好まれています。開発効率を向上させ、コード構造を最適化するために、多くの開発者はフレームワークを使用してアプリケーションを迅速に構築することを選択します。 Go 言語の世界には、選択できる優れたフレームワークが数多くあります。この記事では、5 つの人気のある Go 言語フレームワークを紹介し、読者がこれらのフレームワークをよりよく理解して使用できるように、具体的なコード例を示します。 1.GinGin は高速な軽量 Web フレームワークです。

PHPにおけるechoキーワードの役割と使い方の詳しい説明 PHPにおけるechoキーワードの役割と使い方の詳しい説明 Jun 28, 2023 pm 08:12 PM

PHP における echo キーワードの役割と使用法の詳細な説明 PHP は、Web 開発で広く使用されているサーバーサイド スクリプト言語です。 echo キーワードは、PHP でコンテンツを出力するために使用されるメソッドです。この記事では、echoキーワードの機能と使い方を詳しく紹介します。機能: echo キーワードの主な機能は、コンテンツをブラウザに出力することです。 Web 開発では、フロントエンド ページにデータを動的に表示する必要がありますが、このとき、echo キーワードを使用してデータをページに出力できます。 e

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Laravel 開発: Laravel Echo と Pusher を使用して WebSocket 通信を実装するにはどうすればよいですか? Laravel 開発: Laravel Echo と Pusher を使用して WebSocket 通信を実装するにはどうすればよいですか? Jun 13, 2023 pm 05:01 PM

Laravel は、拡張性と効率性に優れた人気の PHP フレームワークであり、開発者が高品質の Web アプリケーションを迅速に構築できる強力なツールとライブラリを多数提供しています。その中でも、LaravelEcho と Pusher は、WebSocket 通信を簡単に実装できる 2 つの非常に重要なツールであり、この記事では、Laravel アプリケーションでこれら 2 つのツールを使用する方法について詳しく説明します。 WebSocket とは何ですか? Webソケット

Golang の Web フレームワーク Echo フレームワークを使用した分散タスク スケジューリングの実装 Golang の Web フレームワーク Echo フレームワークを使用した分散タスク スケジューリングの実装 Jun 24, 2023 am 11:49 AM

インターネットの発達や情報技術の進歩によりビッグデータの時代が到来し、データ分析や機械学習などの分野も広く活用されています。これらの分野では、タスクのスケジューリングは避けられない問題です。効率的なタスクのスケジューリングを実現する方法は、効率を向上させるために重要です。この記事では、Golang の Web フレームワーク Echo フレームワークを使用して分散タスク スケジューリングを実装する方法を紹介します。 1. Echo フレームワークの概要 Echo は、高性能、スケーラブル、軽量の GoWeb フレームワークです。 HTTPに基づいています

Go 言語フレームワークを探索する: 見逃せない 5 つの選択肢! Go 言語フレームワークを探索する: 見逃せない 5 つの選択肢! Feb 19, 2024 pm 02:29 PM

Go 言語は、高速で効率的なプログラミング言語として、常にプログラマーに好まれてきました。 Go 言語エコシステムでは、フレームワークは、開発者がアプリケーションをより迅速に構築できるようにする上で重要な役割を果たします。この記事では、Go 言語のフレームワークを 5 つ紹介し、それぞれの特徴と使い方を理解します。 1. Gin フレームワーク Gin フレームワークは、高速で高性能な特性を備えた軽量の Web フレームワークです。 Jin フレームワークを使用して、RESTful API と Web アプリケーションを迅速に構築します。簡単なコード例を次に示します。

市場で最も人気のある Golang フレームワークは何ですか? 市場で最も人気のある Golang フレームワークは何ですか? Jun 01, 2024 pm 08:05 PM

現在最も人気のある Go フレームワークは次のとおりです。 Gin: 軽量で高性能な Web フレームワークで、シンプルで使いやすいです。 Echo: 高性能のルーティングとミドルウェアを提供する、高速で高度にカスタマイズ可能な Web フレームワーク。 GorillaMux: 高度なルーティング構成オプションを提供する高速で柔軟なマルチプレクサー。 Fiber: 大量の同時リクエストを処理する、パフォーマンスが最適化された高性能 Web フレームワーク。 Martini: 豊富な機能セットを提供するオブジェクト指向設計のモジュール式 Web フレームワーク。

See all articles