
No.2ベストアンサー
- 回答日時:
>バッファ自体とはどういう意味でしょうか?
この質問が出るということは、ob_XXXX系関数を利用するにあたっての基礎知識が不足してますね。
---------------------------------
第一に、ob_XXXX系関数こと、
出力制御関数(output control)について知識を習得しましょう。
参考URLに、マニュアルへのリンクを記載しておきます。
一読して知識を習得してください。
第二に、出力制御関数(output control)の使い方の基本を押さえましょう。
基本は、ob_start() と ob_end_XXXX() を組合せて使うことです。
・ob_start()で出力制御を開始。
・ob_end_XXXX()で出力制御を終了。
この、ob_start()とob_end_XXXX()は【必ず】対で利用しなければならないルールなので注意してください。
------------------------------------------
基礎知識については以上です。
さて、ここで質問にある
>ob_end_clean と ob_clean の違いはなんですか?
について考えましょう。
もう答えはお分かりだと思いますが、
ob_end_clean()関数は、ob_end_XXXX()の一種です。
つまり、
・ob_end_clean():ob_start()で開始した出力制御を終了する場合。
・ob_clean():出力制御を継続する場合。
というのが2者の違いになります。
参考URL:http://jp.php.net/manual/ja/ref.outcontrol.php
ご回答ありがとうございます。
おかげさまでだいたい理解できました。これって基本的なことなんですよね?
独学でPHPを勉強しており、『独習PHP』と『はじめてのPHP言語プログラミング入門』を読んだのですが、出力制御に関して前者は一切ふれず、後者も1ページほどしか説明がありませんでした。
> この、ob_start()とob_end_XXXX()は【必ず】対で利用しなければならないルールなので注意してください。
なるほど。これは、「(実はPHPが勝手にやってくれるけども)本来は、openしたら【必ず】closeしなきゃいけない」というのと同じですね?
つまり、バッファを開始したら【必ず】ob_end_flush() とかしなきゃいけない。でも、初心者や面倒臭がり屋や書き忘れた人のために、実はPHPが勝手にやってくれる。という感じでしょうか。
ちなみにバッファがネストできることも知りませんでした。ob_get_level()というネストレベルを返す関数があるのですが、バッファをネストさせた後、ob_end_cleanもしくはob_cleanした場合のネストレベルを調べると、ob_end_cleanの時に、ネストレベルが一つ減っているのを確認しました。
> ・ob_end_clean():ob_start()で開始した出力制御を終了する場合。
> ・ob_clean():出力制御を継続する場合。
書籍にもこのように書いていただけると助かりますね。
ありがとうございました。
No.1
- 回答日時:
バッファ自体というのは、有効な状態のバッファということでしょう。
バッファ自体を削除するというのは、有効にしたバッファを無効にするということだと思います。
ob_start(); //バッファを有効にする
echo "Hello"; //出力されません
echo "World"; //出力されません
setcookie("cookiename", "cookiedata"); //セットされます
$str01 = ob_get_contents(); //バッファ内容を変数に格納
ob_clean(); //バッファ内容を削除
echo "Hello\n"; //出力されません
setcookie("cookiename02", "cookiedata02"); //セットされます
$str02 = ob_get_contents(); //バッファ内容を変数に格納
ob_end_clean(); //バッファ内容を削除し、バッファを無効にする(バッファ自体も削除)
echo "Hello"; //出力されます
echo $str01; // HelloWorld と出力されます
echo $str02; //Hello と出力されます
setcookie("cookiename", "cookiedata"); //←エラー
となります。
ご回答ありがとうございます。
なるほどよく分かりました。
ob_cleanは現在のバッファ内容を削除して、ob_end_cleanは現在のバッファ自体を削除するから、この例の用に、バッファがネストされていない場合は、ob_end_cleanの後、echoはバッファされずに、直接出力していくって感じですね?
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GDで生成したはずの画像が文字...
-
特定のURLに移動するには?
-
¥マークを出力したいがバック...
-
【PHP】関数で処理が止まってる...
-
PHPのif文でその処理を途中で抜...
-
Subversionのリポジトリの削除
-
*.php、*.php3、*.phtmlの違い
-
FTPコマンドでディレクトリごと...
-
Cronで同じ処理を複数同時に実...
-
.phpと.incファイルの違いはな...
-
バッチを用いたフォルダの自動移動
-
ボタンのクリック数を合計保存...
-
visualstudioでc#のdllができない
-
PHPで画像アップロード時にサイ...
-
CakePHPのファイルの所有者の権...
-
error_reporting(0);にも関わら...
-
zip圧縮の種類について
-
「@$変数」の「@の意味は?」
-
ftpでアップロードが出来ない
-
rmdirでフォルダが消せません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ob_end_clean と ob_clean の違...
-
CSV出力にHTMLが入ってしまう
-
PHPリンク
-
画面にそのままを出力したい
-
PHPがどうしても反映されません
-
Smarty/pluginsファルダ内 fun...
-
特定のURLに移動するには?
-
セッション管理に関する質問
-
php 画像表示(imgタグ)
-
mPDFでのPDF出力がうまくいかな...
-
PHPにおける時間計算、時間足し...
-
PHPでPDFを作成するためのライ...
-
CGIからPHPへの書き換え
-
PHPで`headers already sent`と...
-
phpexcelにてsubmitボタンを押...
-
ブラウザのページキャッシュ機...
-
PHPでの出力ページサイズについて
-
phpとdb
-
PHPで取得したHTML内のdiv要素...
-
検索結果の出力後、それをTXTに...
おすすめ情報