ホームページ  >  記事  >  バックエンド開発  >  php obシリーズの関数でよく使う関数まとめ

php obシリーズの関数でよく使う関数まとめ

WBOY
WBOYオリジナル
2016-07-30 13:31:47892ブラウズ

commonly一連の関数でcommonly使用してください


b_start()
ob_clean(); //バッファを閉じずに内部バッファの内容を削除します(出力なし)。

ob_end_clean(); //内部バッファの内容を削除し、バッファを閉じます(出力なし)。
ob_g​​et_clean(); //内部バッファの内容を返し、バッファを閉じます。 ob_get_contents() および ob_end_clean() の実行と同等
ob_flush(); // 内部バッファの内容をブラウザに送信し、バッファの内容を削除し、バッファを閉じません。
ob_end_flush(); //内部バッファの内容をブラウザに送信し、バッファの内容を削除して、バッファを閉じます。
ob_g​​et_flush(); //内部バッファの内容を返し、バッファを閉じてから、バッファの内容を解放します。 ob_end_flush() と同等で、バッファの内容を返します。
flush(); //ob_flush で解放した内容と PHP バッファにない内容をブラウザに出力し、内部バッファの内容を更新して出力します。

ob_g​​et_contents(); // 出力せずにバッファーの内容を返します。

ob_g​​et_length(); // 内部バッファーがアクティブ化されていない場合、この関数は FALSE を返します。
ob_g​​et_level(); //出力バッファリングメカニズムのネストレベルを返します。
ob_g​​et_status(); //出力バッファのステータスを取得します。

ob_implicit_flush(); //絶対リフレッシュをオンまたはオフにします。 ob_implicit_flush(true) を開いた後、いわゆる絶対リフレッシュは、出力ステートメント (例: echo) が実行されると、flush() を呼び出したり終了まで待機したりする必要がなく、出力がブラウザに直接送信されることを意味します。出力するスクリプトの。

ob_g​​zhandler //ob_start コールバック関数は、gzip を使用してバッファーの内容を圧縮します。

ob_list_handlers //使用中のすべての出力ハンドラーをリストします
output_add_rewrite_var //URL リライター値を追加します
output_reset_rewrite_vars //URL リライター値をリセットします

これらの関数の動作は、php_ini 設定の影響を受けます:

output_buffering //この値が ON の場合、すべてのスクリプトで出力コントロールが使用されます。値が数値の場合、キャッシュされたコンテンツが上限に達すると、現在のバッファーのコンテンツが自動的にブラウザーに出力されます。 。
output_handler //このオプションは、スクリプトのすべての出力を関数にリダイレクトできます。たとえば、output_handler が mb_output_handler() に設定されている場合、文字のエンコーディングは指定されたエンコーディングに変更されます。設定された処理関数は出力バッファリングを自動的に処理します。
implicit_flush //ob_implicit_flush と同じ機能、デフォルトはオフです。

PHPのob_start();を使用します

ブラウザのキャッシュを制御します

出力制御機能を使用すると、スクリプト内のデータの出力を自由に制御できます。特にデータ出力後にファイルヘッダーを出力したい場合に非常に便利です。出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響せず、echo() および PHP コードと同様のデータ ブロックにのみ影響します。
出力制御の一般的な印象を与えるために、まず簡単な例を見てみましょう:
例 1.

プログラム コードプログラム コード

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

ヘッダーのすべてのペア ( ) 関数は、この関数がブラウザにファイル ヘッダーを送信することを認識していますが、この関数を使用する前に出力 (スペース、復帰、改行などの空の出力を含む) がある場合は、エラーが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。


1. 関連関数の紹介:
1. フラッシュ: バッファーと出力の内容を更新します。
関数形式: flash()
説明: この関数は頻繁に使用され、非常に効率的です。
2. ob_start: 出力バッファを開きます
関数形式: void ob_start(void)
説明: バッファがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。 。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。
3、ob_get_contents: 内部バッファの内容を返します。
使用法: string ob_get_contents(void)
説明: この関数は、出力バッファーがアクティブ化されていない場合、現在のバッファーの内容を返します。
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 関数はこれと同じです。デフォルトでは、絶対出力をオンにした後、各スクリプト出力がブラウザーに直接送信され、


2 を呼び出す必要はありません。詳しい理解:

1. フラッシュ関数について:
この関数は、ブラウザのキャッシュを更新する非常に便利な関数です。例 2.

プログラム コードプログラム コード

for($i = 1; $i <= 300; $i++ ) print(" ");
// この文は非常に重要です。キャッシュの構造により、一定のサイズに達した場合のみブラウザからコンテンツを出力できます
// つまり、キャッシュのコンテンツが一定のサイズに達しない場合、プログラムが実行される前に出力されません。
// テストの結果、このサイズの下限は 256 文字であることがわかりました。これは、今後キャッシュによって受信されるコンテンツが
// 継続的に送信されることを意味します。
For($j = 1; $j <= 20; $j++) {
echo $j."
";
flush(); //これにより、キャッシュ内の新しいコンテンツが絞り出されて表示されますブラウザに移動します
sleep(1); // プログラムを 1 秒間「スリープ」させます。これにより、効果をより明確に確認できるようになります
}
?>

注: ob_implicit_flush() を絶対リフレッシュを使用すると、プログラム内でフラッシュ() を使用できなくなります。これにより、効率が向上します。

2. ob シリーズの機能について:

まずは私の友人 y10k の例を引用したいと思います:
例 3.

たとえば、サーバーとクライアントの設定情報を使用できますが、この情報はクライアントによって異なりますが、phpinfo() 関数の出力を保存したい場合はどうすればよいでしょうか。バッファ制御がなかった前は、まったく方法がなかったと言えますが、バッファ制御を使用すると、それを簡単に解決できます。 phpinfo (); //phpinfo 関数を使用します

$info=ob_get_contents(); //バッファの内容を取得し、$info
$file=fopen('info.txt','w'); / //ファイルを開く info .txt
fwrite($file,$info); //info.txt
fclose($file); //ファイルを閉じる info.txt
?>

上記のメソッドを使用ユーザーの phpinfo 情報が保存されますが、以前は不可能だった可能性があります。実は上記は一部の「処理」を「関数」に変換する方法なのです!
「これはただのことですか? 他に用途はあるのですか?」と疑問に思う人もいるかもしれません。もちろん、たとえば、作者のフォーラムの PHP 構文ハイライトはこれに関連しています (PHP のデフォルトの構文ハイライト機能は直接出力します)。呼び出すたびに結果が表示されるとCPUの無駄になりますので、興味のある方は構文強調表示機能で表示された結果を保存しておいてください。見てください

これで、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 というクラスを通じて実装されます。
。ob シリーズ関数を使用して実装されます。
最初の方法については、この記事で検討する問題ではないため、詳細は説明しません。
2 番目のメソッドの具体的な実装を見てみましょう:
例 4.


プログラム コードプログラム コード
ob_start();//バッファを開きます
?>
PHP ページのすべてOutput
$content = ob_get_contents();//PHP ページによって出力されたすべてのコンテンツを取得します
$fp = fopen("output00001.html", "w"); //ファイルを作成して開きます。書き込み準備完了
fwrite($fp, $content); //PHP ページのすべてのコンテンツを Output00001.html に書き込み、次に...
fclose($fp);
?>


ちなみに、いわゆる静的テンプレートは非常に簡単に実装できます...

2. 出力をキャプチャします

上記の例 4. は最も単純なケースです。書き込む前に $content を操作することもできます...

を試すことができます。例 3 で説明した PHP 構文の強調表示など、いくつかのキーワードを取得して再処理します。個人的には、この関数がこの関数の最大のエッセンスだと思っています。さまざまな問題を解決できますが、十分な想像力が必要です...

例 5.

プログラムコードプログラムコード
関数run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo "エラー! 出力がありません" ;
exit();
}
return $contents;
?>
}

上記の例はあまり役に立ちませんが、$code 自体が変数を含む出力ページであり、この例では eval が使用されています。 $code 内の変数を置き換え、出力結果をキャプチャして再度処理します...

2. 出力キャッシュ ハンドル ob_gzhandler


PHP4.0.4 には、以前のクラスに関連する新しい出力キャッシュ ハンドル ob_gzhandler があります。似ていますが、使い方が異なります。 ob_gzhandler を使用する場合は、次の内容を php.ini に追加する必要があります。


output_handler = ob_gzhandler;


このコード行により、PHP は出力キャッシュをアクティブにし、送信するすべてのものを圧縮します。

何らかの理由でこのコード行を php.ini に追加したくない場合は、PHP ソース ファイルが配置されているディレクトリ内の .htaccess ファイルを使用して、デフォルトのサーバー動作 (非圧縮) を変更することもできます。構文は次のとおりです。


php_value Output_handler ob_gzhandler


または、次のように PHP コードから呼び出します。


ob_start("ob_gzhandler");


キャッシュ ハンドルを出力する方法は確かに非常に効果的であり、サーバーに特別な負荷をかけません。ただし、Netscape Communicator では圧縮グラフィックのサポートが不十分であるため、すべてのユーザーが IE ブラウザを使用していることを保証できない限り、圧縮 JPEG および GIF グラフィックを無効にする必要があることに注意してください。一般に、この圧縮は他のすべてのファイルに対して機能しますが、特に特別なプラグインやデータ ビューアを使用する場合は、ブラウザごとに個別にテストすることをお勧めします。
注意:
1. 一部の Web サーバーのデフォルトの Output_buffering は 4069 文字以上です。つまり、フラッシュを効果的に行うには、出力コンテンツが 4069 文字に達する必要があります。 ob_flush() 関数の前に以下を追加します。 ステートメント:

コードは次のとおりです:

print str_repeat("", 4096); //output_buffering 値に到達することを確認するには、ob_* 系列を使用します。関数はPHP自体の出力バッファを操作するため、ob_flushはPHP自身のバッファ領域をリフレッシュするだけで、flushはApacheのバッファをリフレッシュすることになります。したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。 ob_flush は PHP のバッファからデータを解放し、flush はバッファに出入りするすべてのデータをブラウザに送信します。

3. ob_start() を使用した後は、スクリプトの echo/print やその他の出力がブラウザーに表示されないと誤解しないでください。 PHP スクリプトが終了すると、バッファが自動的に更新され、内容が出力されるためです。

上記は、PHP ob シリーズの関数でよく使用される関数の概要を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。