ホームページ バックエンド開発 PHPチュートリアル PHP ob_start() を使用してブラウザのキャッシュを制御し、HTML 実装コードを生成する_PHP チュートリアル

PHP ob_start() を使用してブラウザのキャッシュを制御し、HTML 実装コードを生成する_PHP チュートリアル

Jul 21, 2016 pm 03:40 PM
cache head html php start コード 使用 関数 成し遂げる コントロール ブラウザ 生成する 使用 出力

出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響せず、echo() および PHP コードと同様のデータ ブロックにのみ影響します。

出力制御の一般的な印象を与えるために、まず簡単な例を見てみましょう:
例 1.
PHP コード

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

ob_start(); // バッファを開きます
echo "Hellon"; // 出力
header("location:index.php"); // ブラウザをindex.phpにリダイレクトします
ob_end_flush(); // コンテンツ全体をブラウザに出力します
?>

header() 関数を知っている人は誰でも、この関数がファイル ヘッダーをブラウザーに送信することを知っていますが、この関数を使用する前に出力 (スペースなどの空の出力を含む) がある場合は、キャリッジ リターンと改行) を使用するとエラーが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。
1. 関連関数の紹介:
1. フラッシュ: バッファーの内容を更新して出力します。
関数形式: flash()
説明: この関数は頻繁に使用され、非常に効率的です。
2. ob_start: 出力バッファを開きます
関数形式: void ob_start(void)
説明: バッファがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファ。
バッファの内容を出力するには、ob_end_flush()またはflush()を使用してバッファの内容を出力できます。
3、ob_get_contents: 内部バッファの内容を返します。
使用法: string ob_get_contents(void)
説明: この関数は、現在のバッファーの内容を返します。出力バッファーがアクティブ化されていない場合は、FALSE を返します。
4. ob_get_length: 内部バッファーの長さを返します。
使用法: int ob_get_length(void)
説明: この関数は、出力バッファーがアクティブ化されていない場合、ob_get_contents と同様に現在のバッファーの長さを返します。その後、FALSE を返します。
5. ob_end_flush: 内部バッファの内容をブラウザに送信し、出力バッファを閉じます。
使用法: void ob_end_flush(void)
説明: この関数は、出力バッファーの内容 (存在する場合) を送信します。
6. ob_end_clean: 内部バッファの内容を削除し、内部バッファを閉じます。
使用法: void ob_end_clean(void)
説明: この関数は内部バッファの内容を出力するのではなく、内部バッファを削除します。
7. ob_implicit_flush: 絶対フラッシュをオンまたはオフにします
使用法: void ob_implicit_flush ([int flag])
注: Perl を使用したことのある人なら誰でも、この文字列は $|=x の意味を知っています。 ob_implicit_flush 関数もそれと同じです。デフォルトでは、絶対出力をオンにした後、各スクリプト出力がブラウザに直接送信され、flush() を呼び出す必要はありません。
2. 詳細な理解:
1. フラッシュ関数について: この関数は、ブラウザのキャッシュを更新する非常に便利な関数です。フラッシュを説明するための非常に明白な効果を持つ例
例 2.
PHP コード

コードをコピーします コードは次のとおりです:
// この文は非常に重要です。キャッシュの構造により、そのコンテンツは一定のサイズに達した場合にのみブラウザから出力されます。つまり、キャッシュの内容が一定のサイズに達しない場合、プログラムの実行が完了するまで出力されません。
// テストの結果、このサイズの下限は 256 文字であることがわかりました。これは、今後キャッシュによって受信されるコンテンツが
// 継続的に送信されることを意味します。
For($j = 1; $j <= 20; $j++) {
echo $j.”
flush(); // これにより、キャッシュ内の新しいコンテンツが絞り出されて表示されます。ブラウザに移動します
sleep(1); //プログラムを少しの間「スリープ」させます。これにより、効果をより明確に確認できるようになります
}
?>
注: ob_implicit_flush() をプログラムの先頭に追加して絶対リフレッシュを有効にすると、プログラム内で flash() を使用できなくなります。これによる利点は次のとおりです。効率が向上します。
2. ob シリーズの機能について:
最初に私の友人 y10k の例を引用したいと思います:
例 3.
たとえば、サーバーとクライアントの設定情報を使用できますが、この情報はクライアントによって異なりますが、phpinfo() 関数の出力を保存したい場合はどうすればよいでしょうか。バッファ制御がない前はまったく方法がなかったと言えますが、バッファ制御があれば簡単に解決できます:
PHP コード
コードをコピー コードは次のとおりです:

ob_start (); // バッファを開きます
phpinfo(); // phpinfo 関数を使用します
$info=ob_get_contents(); // バッファの内容を $info に割り当てます
$file= fopen('info.txt', 'w'); // ファイル info.txt を開きます
fwrite($file,$info); // info.txt に情報を書き込みます
fclose($file); file info.txt
?>

上記の方法を使用すると、以前は不可能だったかもしれない、さまざまなユーザーの phpinfo 情報を保存できます。実は上記は一部の「処理」を「関数」に変換する方法なのです!
これで、ob_start() の関数をある程度理解できたのではないでしょうか。上の例は単純に見えますが、実際には、ob_start() の使用の重要なポイントをマスターしたことになります。
<1>. ob_start を使用してブラウザのキャッシュを開くと、flush()、ob_end_flush() を呼び出す前 (またはプログラムが実行される前) にキャッシュの内容が出力されなくなります。
<2>. これで、出力コンテンツの後にヘッダー、setcookie、セッションを使用できることがわかりました。これは ob_start の優れた機能であり、ob_start のパラメーターをキャッシュに書き込むこともできます。入力後、ob_start("ob_gzhandler"); などのコマンドを自動的に実行します。最も一般的に使用される方法は、ob_get_contents() を使用してキャッシュ内のコンテンツを取得し、それを処理することです。
<3>処理が完了したら、flush()、ob_end_flush()、プログラム実行後の自動出力など、様々な方法で出力することができます。もちろん、ob_get_contents() を使用している場合は、出力メソッドを自分で制御する必要があります。
次に、ob シリーズの関数で何ができるかを見てみましょう...
1. 静的テンプレート技術
はじめに: いわゆる静的テンプレート技術は、ユーザーがクライアント上で取得するものを特定のメソッドを使用して作成することです。サイドはPHP HTMLページによって生成されます。この HTML ページが更新されなくなると、別のユーザーがこのページを再度参照したときに、プログラムは、sina、163、sohu などの大量の情報を含む一部の Web サイトの PHP および関連データベースを呼び出すことはなくなります。このようなテクノロジーの恩恵は非常に大きいです。
私が知っている静的出力を実現するには 2 つの方法があります:
<1>。y10k によって変更された phplib の template.inc.php というクラスを通じて実装されます。
<2>. ob シリーズの関数を使用して実装されます。
最初の方法については、この記事で検討する問題ではないため、詳細は説明しません。
2 番目のメソッドの具体的な実装を見てみましょう:
例 4.
PHP コード
コードをコピー コードは次のとおりです:

ob_start();//バッファを開きます
?>

PHP コードのすべての出力

コードをコピーします コードは次のとおりです:
$content = ob_get_contents();// php ページの内容を出力します
$fp = fopen("output00001.html", "w"); //ファイルを作成して書き込み用に開きます
fwrite($fp, $content); // php ページをoutput00001.htmlにコピーし、その後...
?>


この方法で、いわゆる静的テンプレートを簡単に実装できます...

2.
上記の例 4. は、最も単純なケースでは、書き込む前に $content を操作することもできます... 例 3 で説明した PHP 構文の強調表示など、いくつかのキーワードをキャプチャして再処理してみることもできます。個人的には、この関数がこの関数の最大のエッセンスだと思います。この関数はさまざまな問題を解決できますが、十分な想像力が必要です...
例 5.
PHP コード


コードをコピーしますは次のとおりです:
Function run_code($code) {
ob_start();
$contents = ob_get_contents();
}else {
echo "エラー! 出力がありません"
}
return $contents;

;
上記の例はあまり役に立ちませんが、$code 自体が変数を含む出力ページであることが一般的です。この例では、$code 内の変数を置き換えるために eval が使用され、出力結果が再度取得されます。 ..
例 6. 転送を高速化する
PHP コード
コードをコピー コードは次のとおりです:

/*
** タイトル.... .: PHP4 HTTP 圧縮により Web が高速化
** バージョン....: 1.20
** 著者.....: catoc <[email]catoc@163.net[/email] >
** ファイル名...: gzdoc.php
** 最終変更日: 18/10/2000
** 要件...: PHP4 >= 4.0.1
** PHP は -- で構成されましたwith- zlib[=DIR]
** 注....................: ダイナミック コンテンツ アクセラレーションは、
** オンザフライでデータ送信データを圧縮します
** コード by sun jin hu (catoc) ** 1998/1999 年以降のほとんどの新しいブラウザーには、基本的に「コンテンツ エンコーディング」として知られる HTTP 1.1
** 標準がサポートされています。ブラウザは
** サーバーに「コンテンツ エンコーディング」
** を受け入れることができることを示し、サーバーが対応できる場合は、データを
** 圧縮して送信します。
** ブラウザはそれを解凍してから
をレンダリングします。 ** ページ
**
** John Lim ([email]jlim@natsoft.com.my[/email]) によって変更されました
** Sandy McArthur, Jr のアイデアに基づいています
** 使用法.... . .:
** 最初の ' * * |** | include('gzdoc.php'); ? >
** |... ページ ...
** | | ファイルの終わり---- ------
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
if (headers_sent() || connection_timeout() || connection_aborted( )){
リターン 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) リターン "x-gzip"
if (strpos($HTTP_ACCEPT_ENCODING, 'gzip') !== false) return " gzip";
return 0;
}
/* $level = 圧縮レベル 0-9、0=なし、9=最大 */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip ();
if ($ENCODING){
print "nn";
$Contents = ob_get_contents(); debug){
$s = "

長さを圧縮しません: ".strlen($Contents) .= "
圧縮された長さ: ".strlen(gzcompress($Contents,$level));コンテンツ .= $s;
header("コンテンツ エンコーディング: $ENCODING");
$Size = strlen($Contents); = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) - 4); ('V' 。彼は zlib の機能を使用して、送信されたコンテンツを圧縮しました。テストでは、その効果は 10k を超えるページで生成されることが示され、ページが大きくなればなるほど、その効果はより明白になります...



http://www.bkjia.com/PHPjc/321271.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/321271.html

技術記事

出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響しませんが、echo() や PHP コードと同様のデータ ブロックにのみ影響します。 まずは簡単なものからあげましょう...





このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

HTML対CSSおよびJavaScript:Webテクノロジーの比較 HTML対CSSおよびJavaScript:Webテクノロジーの比較 Apr 23, 2025 am 12:05 AM

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

IISとPHPの互換性:ディープダイビング IISとPHPの互換性:ディープダイビング Apr 22, 2025 am 12:01 AM

IISとPHPは互換性があり、FastCGIを通じて実装されています。 1..phpファイル要求を構成ファイルを介してFastCGIモジュールに転送します。 2. FASTCGIモジュールは、PHPプロセスを開始して、パフォーマンスと安定性を改善するための要求を処理します。 3。実際のアプリケーションでは、構成の詳細、エラーデバッグ、パフォーマンスの最適化に注意する必要があります。

OUYI Exchange OUYI Exchange登録チュートリアルでアカウントを登録する方法 OUYI Exchange OUYI Exchange登録チュートリアルでアカウントを登録する方法 Apr 24, 2025 pm 02:06 PM

OUYIアカウントを登録する手順は次のとおりです。1。有効な電子メールまたは携帯電話番号を準備し、ネットワークを安定させます。 2。OUYIの公式ウェブサイトにアクセスしてください。 3.登録ページを入力します。 4.電子メールまたは携帯電話番号を選択して、情報を登録して入力します。 5。検証コードを取得して入力します。 6。ユーザー契約に同意します。 7.登録を完了してログインし、KYCを実行してセキュリティ対策を設定します。

バイナンスダウンロードリンクバイナンスダウンロードパス バイナンスダウンロードリンクバイナンスダウンロードパス Apr 24, 2025 pm 02:12 PM

Binanceアプリを安全にダウンロードするには、公式チャネルを通過する必要があります。1。Binance公式Webサイトにアクセスして、アプリをダウンロードするポータルを見つけてクリックします。3。

Apple携帯電話用のOUYI Exchangeアプリの公式Webサイトをダウンロードする Apple携帯電話用のOUYI Exchangeアプリの公式Webサイトをダウンロードする Apr 28, 2025 pm 06:57 PM

OUYI Exchangeアプリは、Apple携帯電話のダウンロードをサポートし、公式Webサイトにアクセスし、「Apple Mobile」オプションをクリックして、App Storeに入手してインストールし、登録またはログインして暗号通貨取引を実施します。

マークアップ言語としてのHTML:その機能と目的 マークアップ言語としてのHTML:その機能と目的 Apr 22, 2025 am 12:02 AM

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

USDT転送アドレスが正しくない場合はどうすればよいですか?初心者向けガイド USDT転送アドレスが正しくない場合はどうすればよいですか?初心者向けガイド Apr 21, 2025 pm 12:12 PM

USDT転送アドレスが正しくない後、最初に転送が発生したことを確認し、次にエラータイプに応じて測定を行います。 1.転送の確認:トランザクション履歴を表示し、ブロックチェーンブラウザーでトランザクションハッシュ値を取得してクエリします。 2。対策を講じる:住所が存在しない場合は、資金が返還されるのを待つか、カスタマーサービスに連絡してください。無効なアドレスの場合は、顧客サービスに連絡し、専門家の助けを求めてください。それが他の誰かに転送された場合は、受取人に連絡するか、法的支援を求めてください。

セサミオープンエクスチェンジにアカウントを登録する方法は?セサミオープンエクスチェンジの登録に関するチュートリアル セサミオープンエクスチェンジにアカウントを登録する方法は?セサミオープンエクスチェンジの登録に関するチュートリアル Apr 24, 2025 pm 02:00 PM

セサミドアオープンアカウントを登録するには、7つの手順が必要です。1。有効な電子メールまたは携帯電話番号と安定したネットワークを準備します。 2。公式ウェブサイトにアクセスしてください。 3.登録ページを入力します。 4.登録方法を選択して入力します。 5。検証コードを取得して入力します。 6。ユーザー契約に同意します。 7.登録を完了してログインすると、KYCを実行してセキュリティ対策を設定することをお勧めします。

See all articles