PHP はデータを 1 行ずつ出力し、バッファリングに関連する 2 つの一般的な問題を解決します
PHP はデータを 1 行ずつ出力し、2 つの一般的なバッファリングの問題を解決します
このブロガーは、さまざまなインターネット技術に熱心で、しばしば強迫性障害を伴います。頻繁に更新しており、その記事が正しいと思われる場合は、フォローしてください。 「Dark Blue Sickle」と明記してください
1.
次の 2 つの状況に遭遇したことがあるのではないでしょうか:
- 上司は、データベース内のすべてのデータをブラウザに表示するよう求めています。データを比較する必要があるため、ページネーションは使用できないと要求しています。それでは、出力してください。ループ内で 1,000 個のデータを直接出力するのは問題ありませんが、データが数百万個ある場合はどうなるでしょうか?ブラウザがすぐにフリーズしてしまい、席を立ってコーヒーを飲みに行ったり、トイレに行ったりして、受付の人と長時間雑談をしていると、戻ってくるとブラウザが「プログラムが応答していません」と表示されます。どうすればいいでしょうか?
- 上司から、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()を最後に追加します。
<?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();

ホット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)

ホットトピック









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

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

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

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

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

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

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

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