検索

PHPバッファ

May 15, 2018 pm 05:46 PM
phpバッファ

この記事では PHP バッファーの知識を紹介し、助けが必要な友達に参考にしてもらいましょう

バッファーとは何ですか?
シンプルでシンプルな関数です。バッファーの機能は、入力または出力の内容を、表示したり読み取ったりせずに、最初にメモリーに入れることです。なぜバッファーがあるのか​​というと、これは非常に広範な質問ですが、実際、バッファーの最も重要な機能は次のとおりです。その機能は、高速な CPU と比較的遅い IO デバイス (ディスクなど) の動作を調整することです。

PHPのバッファを理解したい場合は、PHPの実行時にバッファがどこに設定されるかを知る必要があります。

PHPの実行時、echo print_rなどのデータを出力するコードに遭遇すると、PHPは出力するデータをPHP自身のバッファに入れて出力を待ちます


PHP自身のバッファが内容を受け取ったとき、という命令です。バッファーが出力されると、バッファー内のデータが Apache に出力されます。Apache は、PHP が出力したデータを受け取り、出力されるまでデータを Apache 自身のバッファーに保管します

Apache が命令を受け取り、単に出力したい場合バッファの内容を出力すると、バッファの内容を出力してブラウザに返します。PHP がデータを出力する場合、2 つのバッファ (最初は独自のバッファ、次に Apache) を通過することがわかります。次にブラウザに戻ります。

PHP でのバッファの役割は何ですか?

1. 最も一般的なのは、ヘッダー関数を使用する前にデータが出力されているため、ヘッダーを変更できないなどのエラーが発生することです。情報 –

1


このエラーの理由は、ヘッダーの前にいくつかのデータが出力されており、このデータの出力中に、Apache がブラウザーに応答ステータスも送信します (出力があるため、このリクエストは有効です)。 http ヘッダーを送信するために header 関数を再度実行すると、このエラーが返されます。このエラーは、HTTP ヘッダーが送信されたため、それを変更できないことを意味します。
このエラーを回避するためにバッファーを使用する理由は何ですか?
ヘッダー関数がバッファーの影響を受けず、ヘッダー関数に遭遇すると、PHP は直ちに Apache を実行して、この http ヘッダーをブラウザーに送信します。
そして、PHP が出力バッファーを開いた後の出力データは、バッファーに保管され、出力を待ちます。これにより、以前に発生したエラーを回避できます。
ファイルのダウンロードをより安全にし、制御性を向上させるために、多くの友人がファイルのダウンロード ページを作成することを好みます。非常に簡単です。fwrite を通じてファイルの内容を読み取って表示し、ヘッダーを通じて HTTP ヘッダーを送信して、これが添付ファイルであることをブラウザーに知らせます。これにより、
ダウンロード効果を提供できます。
上記の方法を使用する場合ダウンロード ページを提供するには、ファイルが 100M であると仮定すると、バッファ出力をオンにせずにすべての 100M データを読み出し、一度にページに戻る必要があるため、効率の問題が発生します。これを行うと、すべてのデータが読み取られるまでユーザーは応答を受け取ることができなくなり、ユーザー エクスペリエンスが低下します
出力バッファがオンになっている場合、PHP プログラムがファイルの特定のセクションの読み取りを完了したとき、その後それをすぐに Apache に出力し、Apache がすぐにブラウザに戻るようにすることで、ユーザーの待ち時間を短縮できます。ファイルをセクションごとに読み取る while ループを作成できます
各セクションを読み取り、すぐに出力します。すべてのファイルが出力されるまで、ブラウザは、すべてのファイルが読み取られるまで待つことなくデータを受信し続けることができます。さらに、このアプローチは、たとえば、ファイルが 100M の場合、別の非常に深刻な問題も解決します。バッファがオンになっていない場合、100M ファイルをすべてメモリに読み込んでから出力する必要があります。しかし、PHP プログラムにメモリ制限がある場合は、サーバーの安定性を確保するために通常、PHP Set に制限を設定します。実行メモリ(php.iniの合計memory_limitによる、デフォルト値は8M)。つまり、各PHPプログラムが使用するメモリはこの値を超えることができず、ファイルを読み込むとします。 100M あり、ファイルを読み取るのに十分なメモリがありません。現時点では、この問題を解決するには、メモリ制限を回避するために、一度に特定のセクションのみを読み取る必要があります
3. 静的。ファイルキャッシュ
あるページに初めてアクセスしたときに、PHPが実行され、同時に表示された内容がブラウザに返される、という要望が多くの企業にあります。をサーバーに保存する必要があります。これにより、次回アクセスしたときに、PHP を介して操作する必要がなく、サーバーに保存されたファイルが直接表示されます
これがいわゆる「静的ページキャッシュ」です。コンテンツを返すにはどうすればよいですか? ブラウザーにアクセスするときにデータをサーバーに保存するには、出力バッファーを使用する必要があります。





4

5
2

echo "によってすでに送信されたヘッダーtest";

header("LOCATION http: //www.baidu.com");

echo "this is test";

header("LOCATION http://www.baidu.com");

6 ob_flush();

ob_start();

echo ' aaa';

$string = ob_get_contents() ;

file_put_contents('a.html'<code class="php plain">, $string);

flush();

ob_start();

echo 'aaa';

$string = ob_get_contents();

file_put_contents('a.html', $string);

ob_flush();

flush();


出力バッファに関する設定

PHP.INIにはバッファと密接に関係する設定項目が2つあります
1.output_buffering
この設定はPHP自体のバッファに直接影響する設定で、Parameter.on/の3つの設定がありますoff/xK (x は整数値);
on - バッファをオンにする
off - バッファをオフにする
256k - バッファをオンにする、バッファの内容が 256k を超えると、バッファは自動的に更新されます(データを Apache に送信);

2.implicit_flush
この設定は Apache バッファに直接影響し、on/off
on の 2 つの設定パラメータがあります。つまり、php がデータを送信するときです。 Apache バッファー、他の命令を待つ必要はなく、出力はブラウザーに直接返されます
off - Apache バッファーを自動的にリフレッシュしません。データを受信した後、リフレッシュ命令を待ちます
buffer
1 .ob_implicit_flush
この関数は、apache バッファを自動的に更新するかどうかを指定する、implicit_flush と同じです。
2.flush
この関数は、Apache に自身の出力バッファを更新させるための命令を送信します。 php.ini に関係なく出力バッファを開きます。 ファイルの設定方法 この関数を使用すると、output_buffering が off に設定されている場合でも、ob_start 関数はコールバックであるパラメータも受け入れます。これは、バッファーの内容を入力する前に、渡されたパラメーターを呼び出してバッファーの内容を一度処理し、それをバッファーに入れる必要があることを意味します
4.ob_flush
PHP 自体に独自のバッファーを更新するように指示し、データをApacheに送信します
5.ob_clean
PHPバッファの内容をクリアします
6.ob_end_clean
PHPバッファの内容をクリアして出力バッファを閉じます
7.ob_end_flush
PHP自身のバッファの内容をApacheに送信してクリアします自身のバッファの内容を取得します
8.ob_get_clean
バッファの内容を取得した後、バッファをクリアします。
9.ob_get_contents
出力バッファの内容を取得します
10.ob_get_flush
バッファの内容を取得し、これらの内容を送信しますapache へ
11.ob_get_length
バッファを取得します
12.ob_list_handlers のコンテンツの長さを取得します
ob_start の実行時に呼び出される関数の名前を取得します。例:
ob_start('ob_gzhandler');
print_r(ob_list_handlers);
ob_g​​zhandler が表示されます。
13.ob_gzhandler
この関数は、ob_start のコールバック パラメーターとして使用され、データに対して gzip 圧縮または deflate 圧縮を実行するために呼び出されます。 zlib拡張子


のバッファの関連コンテンツを使用します

1.ob_flushとflushの順序関係 上記の分析から、ob_flushはPHP自体に関連しており、flushはApacheのバッファを操作することがわかります。これら 2 つの関数を使用する場合は、最初に ob_flush を実行し、次に flash を実行する必要があります。これは、php がデータを更新していない場合は、まず PHP から Apache にデータを送信し、次に Apache からブラウザにデータを返す必要があるためです。 apache を呼び出してフラッシュを呼び出すと、Apache はブラウザーにデータを返しません。

2. 一部のブラウザーでは、受信する文字数が少なすぎると、データが表示されません (古いバージョンの IE など) (表示するには 256k より大きくなければなりません)これは、php と Apache の両方で明らかに疑問が生じます。バッファを更新する操作が実行されましたが、ブラウザに必要なデータが表示されませんでした。そのため、テスト時に複数のデータを追加できる可能性があります。出力データの後にスペースを追加すると、ブラウザーがそのような奇妙な問題を引き起こすことはないと確信しています。これは、独自の出力バッファーが 4K に達するまでコンテンツが更新されないことを意味します。そのため、コンテンツ データを確保するために、次のコードを追加してコンテンツの長さを確保できます

1

2 3
4

5

<?php

echo str_repeat(" ",4096);

<?php

 

echo str_repeat(" ",4096);

 

?>?>


4. Apache で mod_gzip 圧縮モジュールを有効にすると、フラッシュ関数が更新に失敗する可能性があります。これは、PHP がフラッシュ関数を実行するときに、Apache に出力を更新するように指示するためです。 Apache は独自の mod_gzip モジュールにコンテンツを出力しますが、mod_gzip は独自の出力バッファを持っているため、この状況を改善するためにコンテンツをすぐに出力できません。 mod_gzip モジュールをオフにするか、次の内容を httpd.conf に追加して圧縮を無効にすることができます

1


SetEnv no-gzip dont-vary

関連推奨事項:

詳細PHPバッファのフラッシュの説明 サイトを高速化します

PHPバッファとは何ですか?

以上がPHPバッファの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。Apr 17, 2025 am 12:22 AM

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター