ホームページ バックエンド開発 PHPチュートリアル PHPバッファの使い方の詳しい説明output_buffering_PHPチュートリアル

PHPバッファの使い方の詳しい説明output_buffering_PHPチュートリアル

Jul 21, 2016 pm 03:07 PM
buffer linux output php 使用 メモリ 住所 はい 空間 バッファ 詳しい説明

buffer
buffer はメモリ アドレス空間で、Linux システムのデフォルト サイズは通常 4096 (4kb) で、これは 1 つのメモリ ページです。主に、速度が同期していないデバイス間や優先度の異なるデバイス間のデータ転送領域を格納するために使用されます。バッファーを使用すると、プロセスは相互に待機する時間が少なくなります。次に、より一般的な例を示します。ファイルを編集するためにテキスト エディタを開いた場合、文字を入力するたびに、オペレーティング システムはその文字をすぐにディスクに直接書き込むのではなく、書き込み時に最初にその文字をバッファに書き込みます。バッファがいっぱいの場合、バッファ内のデータはディスクに書き込まれます。もちろん、カーネル関数 flash() が呼び出されるときは、バッファ内のダーティ データをディスクに書き戻す必要があります。

同様に、echo と print が実行されると、出力は tcp を介して表示のためにクライアントのブラウザにすぐに送信されませんが、データは php バッファに書き込まれます。 phpのoutput_bufferingメカニズムは、tcpバッファの前に新しいキューが確立され、データがそのキューを通過する必要があることを意味します。 PHP バッファーがいっぱいになると、スクリプト プロセスは PHP バッファー内の出力データをシステム カーネルに渡し、表示のために TCP 経由でブラウザーに渡します。したがって、データは次の場所に順番に書き込まれます: echo/print -> tcp バッファ -> ブラウザ

php Output_buffering
デフォルトでは、php バッファーはオンになっており、バッファーのデフォルト値は 4096、つまり 4kb です。 Output_buffering 設定は php.ini 設定ファイルにあります。echo、print などでユーザー データを出力すると、output_buffering がいっぱいになるまで、データは php の out_buffering に書き込まれます。 。 見せる。 ob_start() を使用して php の出力バッファリングメカニズムを手動でアクティブにすることもできます。これにより、出力が 4kb のデータを超えた場合でも、ob_start() が php バッファスペースを次のように設定するため、データは実際には tcp に渡されず、ブラウザに渡されます。十分な大きさであること。スクリプトが終了するか、ob_end_flush 関数が呼び出されるまで、データはクライアント ブラウザに送信されません。

1.output_buffering=4096 で、出力するデータが少ない (バッファー 1 つ未満) 場合

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

for ($i = 0; $i < ; $i++) {
echo $i . '
';
sleep($i + 1)>


現象: 数秒ごとではありません断続的な出力がありますが、サーバー スクリプトの処理が完了するまで、ブラウザ インターフェイスは空白のままです。これは、データ量が少なすぎてphpのoutput_bufferingがいっぱいになっていないためです。データの書き込み順序は、echo->php バッファ->tcp バッファ->ブラウザです

2.output_buffering=0 で、出力するデータが少ない (バッファー 1 つ未満) 場合


コードをコピーします コードは次のとおりです:
//Pass ini_set('output_buffering ', 0 ) は効果がありません
////etc/php.ini を編集し、output_buffering=0 を設定して出力バッファリング メカニズムを無効にする必要があります
//ini_set('output_buffering', 0) //出力バッファリングを完全に無効にしますfunction
for ($i = 0 ; $i <10; $i++) {
echo $i . '
';
flush(); //オペレーティングシステムの最下層に通知して送信しますできるだけ早くデータをクライアントブラウザに送信します
sleep($i + 1); //
}
?>


現象: PHP バッファリングメカニズムを無効にした後、表示と一致しません。ブラウザで断続的な出力を確認できます。出力を確認するためにスクリプトが実行されるまで待つ必要はありません。これは、phpのoutput_bufferingにデータが残らないためです。データの書き込み順序は、echo->tcpbuffer->browser です
3.output_buffering=4096.の場合、出力データは1つのバッファより大きいため、ob_start()は呼び出されません


コードをコピーします コードは次のとおりです:
#//4kbを作成しますfile
$dd if= /dev/zero of=f4096 bs=4096 count=1
for ($i = 0; $i <10; $i++) {
echo file_get_contents('./f4096 ') . $i . '
';
sleep($i +1);
}
?>


現象: 応答がまだ終了していません (http 接続が閉じられていません)。断続的な出力は断続的に表示されますが、ブラウザのインターフェースは永遠に空白のままになるわけではありません。 phpのoutput_bufferingメカニズムが有効になっていますが、output_bufferingスペースが十分ではないため、1回限りの出力ではなく断続的な出力が依然として存在します。 PHP バッファリングがいっぱいになるたびに、データがクライアント ブラウザに送信されます。

4.output_buffering=4096の場合、出力データが1つのTCPバッファーより大きい場合、ob_start()を呼び出します


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

ob_start(); //php バッファ
を開きます ($i = 0; $i <10; $i++) {
echo file_get_contents('./f4096') '< ;br/>';
sleep($i + 1);
}
ob_end_flush();
?>

現象: サーバー側スクリプトの処理が完了し、応答が終了するまで、完全な出力と出力間隔が見える 一時停止を感じられないほど短い時間です。出力前に、ブラウザは空のインターフェイスを維持し、サーバー データを待ちます。これは、PHP が ob_start() 関数を呼び出すと、ob_end_flush 関数が呼び出されるかスクリプトが終了するまで、PHP バッファーが十分なサイズに拡張されるためです。

出力バッファリング機能

1.ob_g​​et_level
出力バッファリングメカニズムのネストレベルを返します。これにより、テンプレートが繰り返しネストされるのを防ぐことができます。

1.ob_start
は、output_bufferingメカニズムをアクティブにします。アクティブ化すると、スクリプト出力はブラウザに直接送信されなくなり、一時的に PHP バッファ メモリ領域に書き込まれます。

phpはデフォルトでoutput_bufferingメカニズムを有効にしますが、ob_start()関数を呼び出すことにより、データのoutput_buffering値が十分に大きな値に拡張されます。 $chunk_size を指定して、output_buffering の値を指定することもできます。 $chunk_size のデフォルト値は 0 です。これは、スクリプトが終了するまで php バッファー内のデータがブラウザーに送信されないことを意味します。 $chunk_size のサイズを設定すると、バッファ内のデータ長がこの値に達する限り、バッファ内のデータがブラウザに送信されることを意味します。

もちろん、$ouput_callbackを指定することでバッファ内のデータを処理することもできます。たとえば、関数 ob_gzhandler はバッファ内のデータを圧縮してブラウザに送信します。

2.ob_get_contents
PHPバッファ内のデータのコピーを取得します。 ob_end_clean() 関数を呼び出す前にこの関数を呼び出す必要があることに注意してください。そうしないと、ob_get_contents() が null 文字を返します。

3. ob_end_flush と ob_end_clean
これら 2 つの関数は似ており、どちらも ouptu_buffering メカニズムをオフにします。ただし、違いは、ob_end_flush は php バッファー内のデータをクライアント ブラウザーにフラッシュ (フラッシュ/送信) するだけですが、ob_clean_clean は php バッファー内のデータをクリア (消去) しますが、クライアント ブラウザーには送信しないことです。 ob_end_flush が呼び出された後も、php バッファー内のデータはまだ存在しており、ob_get_contents() は引き続き php バッファー内のデータのコピーを取得できます。 ob_end_clean() を呼び出した後、ob_get_contents() は空の文字列を取得し、ブラウザは出力を受け取ることができません。つまり、出力はありません。

使用例
一部のテンプレート エンジンやページ ファイル キャッシュで ob_start() が使用されていることがよくあります。ウェット CI でテンプレートを読み込むためのプログラム コードは次のとおりです:

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

  /*
* 出力をバッファリングします
*
* 出力をバッファリングする理由は 2 つあります:
* 1. 速度。大幅な速度向上が得られます。
* 2. 最終的にレンダリングされたテンプレートを出力クラスによって後処理できます
* 。  なぜ
* 後処理が必要なのでしょうか?  まず、
* 経過したページ読み込み時間を表示するためです。 
* ブラウザに送信される直前にコンテンツをインターセプトして、タイマーを停止できなければ、正確ではありません。
*/
ob_start();
// PHP インストールが短いタグをサポートしていない場合、 'll
// 短いタグを変更して、少し文字列を置換します
// 標準の PHP echo ステートメントに変更します。
if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE)
{
//代替短标记
echo eval('?>'.preg_replace("/;*s*?>/", "; ?>", str_replace(' }
else
{
include($_ci_path); // include() と include_once() では、同じ名前の複数のビューが許可されます
}

//记录调试情報
log_message('debug', 'Fileloaded: '.$_ci_path);
// ファイルデータを返します要求された場合
if ($_ci_return === TRUE)
{
$buffer = ob_get_contents();
@ob_end_clean();
return $buffer;
}
/*
* バッファをフラッシュ... またはフラッシャーをバフします?
*
* ビューを
* 他のビュー内にネストできるようにするには、いつでもコンテンツをフラッシュして戻す必要があります
* 出力バッファリングの最初のレベルを超えているため、
* 適切に表示および含めることができます最初に含まれる
* テンプレートとそれ以降のテンプレートによって。オイ!
*
*/
if (ob_get_level() > $this->_ci_ob_level + 1)
{
ob_end_flush();
}
else
{
// 型板の内容を出流中に追加します
$ _ci_CI->output->append_output(ob_get_contents());
// 消去バッファ
@ob_end_clean();
}


http://www.bkjia.com/PHPjc/327578.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327578.html技術記事バッファ バッファは 1 つの内部メモリ空間であり、Linux システムで通常認識されるサイズは 4096 (4kb)、つまり 1 つの内部メモリです。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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およびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

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

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

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

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

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

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とPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

See all articles