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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
print出力での文字制限について
-
phpにcssを適応させたい...
-
PHPのif文でその処理を途中で抜...
-
拡張子php画像をjpg画像等に変...
-
<A href ~ と一緒に値を渡すには
-
3つ以上の論理積は利用可能なの...
-
「クラス関数」「メンバ関数」...
-
PHPで新しいウインドウで開く命...
-
phpと<?xml version="1.0" enco...
-
fopenでファイルが開かない場合...
-
VB.NETでフリーメールアドレス...
-
PHPファイルの中身が見られるこ...
-
PHPで偶数と奇数を判断するには
-
PHP4、PHP5 1ファイル複数クラ...
-
同じテンプレなのに、URLでは違...
-
HPを開くとダウンロードページ...
-
PHPでFilename cannot be empty...
-
youtubeに音声のみのmp4ファイ...
-
phpスクリプトのみで定期実行
-
mb_send_mailについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSV出力にHTMLが入ってしまう
-
PHPにおける時間計算、時間足し...
-
エクスプローラーでフォルダを...
-
image関数でMS Pゴシックを使い...
-
imgタグでのphpの呼び出しについて
-
PHPで表示したテーブル内容をCS...
-
phpexcelにてsubmitボタンを押...
-
論理演算 NAND に関しての質問
-
PHPで`headers already sent`と...
-
webroot以外の画像の表示
-
¥マークを出力したいがバック...
-
phpにcssを適応させたい...
-
warningを画面に表示させない設...
-
phpで別の場所にある画像への相...
-
phpで数字の値を画像で表示した...
-
PHPSpreadsheetによる書き出し...
-
exit exit(); 言語構造
-
PCからアクセスした場合、ソー...
-
PHPで動的に生成した画像がキャ...
-
phpでの画像表示
おすすめ情報