• ベストアンサー

ob_end_clean と ob_clean の違いはなんですか?

ob_end_clean と ob_clean の違いはなんですか? 両方ともバッファ内容を削除するらしいですが、 ob_end_cleanは、バッファ自体も削除 ob_cleanは、バッファ自体は削除しないとあります。 バッファ自体とはどういう意味でしょうか?

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答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
sweepea
質問者

お礼

ご回答ありがとうございます。 おかげさまでだいたい理解できました。これって基本的なことなんですよね? 独学で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():出力制御を継続する場合。 書籍にもこのように書いていただけると助かりますね。 ありがとうございました。

その他の回答 (1)

  • yexob328
  • ベストアンサー率25% (1/4)
回答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"); //←エラー となります。

sweepea
質問者

お礼

ご回答ありがとうございます。 なるほどよく分かりました。 ob_cleanは現在のバッファ内容を削除して、ob_end_cleanは現在のバッファ自体を削除するから、この例の用に、バッファがネストされていない場合は、ob_end_cleanの後、echoはバッファされずに、直接出力していくって感じですね? ありがとうございました。

関連するQ&A

  • ob_start関数?について教えて下さい

    あるスクリプトを勉強していて、 ob_startと解らない関数がでてきたので PHPマニュアルをみると ob_start -- 出力のバッファリングを有効にする この関数は出力のバッファリングをオンにします。 出力のバッファリングを有効にすると、 (ヘッダ以外の) スクリプトからの出力は実際には行われず、 代わりに内部バッファに保存されます。 と説明がありました。しかしよく説明の意味が理解できずになやんでいます。どなたかわかりやすいように噛み砕いて教えてくただけないでしょうか? ちなみにその関数が使われていたスクリプトは ob_start(); phpinfo(8); $PHPInfoModules = ob_get_contents(); ob_end_clean(); $PHPInfoModules = strip_tags($PHPInfoModules); $GDVersion = stristr($PHPInfoModules, "gd version"); $GDVersion = stristr($GDVersion, "version"); } $GDVersionEnd = strpos($GDVersion, "."); $GDVersion = substr($GDVersion, $GDVersionEnd-1, 1); となっております。上記の関数が参考になればと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 洋楽CDのcleanとdirtyの違い

    洋楽で、よく同じ曲のタイトルの後に"clean"や"dirty"と書いてあるのを見かけます。 "instrumental"や"acapella"は見ても聞いても違いを理解できるのですが、"clean・dirty"の違いは聞いてもよくわかりません(汗; テレビでも、cleanよりdirtyのほうが人気・・と聞いたばかりですし、 いったいどんな意味でどんな違いがあるのかわかる人いますか??

  • 違いを教えてください。

    会社説明会と会社訪問の違いはなんでしょうか? 説明会の後に会社訪問やOB訪問は意味ないのですか? お願いいたします。

  • 親睦会か?影の組織か?(OB会の謎)

    こんにちは。 日本の各省庁では「OBが実質的な支配力を持っている」 と最近聞きました。 「親睦会で花見の席取りを命じる」とかそんなレベル では無いらしいので(?) 「ではOBとはどんな人達なのか?」 を解明しようとしたら頓挫してしまいました。 そこで以下のような事を教えて下さい。 1:新聞などでは、「元警察官」と「警察OB」を使いわけて   いるようですが、違いは何ですか?   自衛隊は予備役などがおりますが、自衛隊OBも存在しますか?   (アメリカとかでは、退役軍人って言うのかな?) 2:誰かが「OB会を作ろう」と言えば作れるだけの話ですか? 3:公の組織のOB会ってどんな組織ですか?   (大学のOB会なんかとはだいぶ様相が違うようですが...) 4:そもそもOBという言葉は誰がいつ頃使い始めたのですか?   (old boyは本来は卒業生、先輩の意味でしかない。) 以上、よろしくお願いします。

  • 「げらげら」と「けらけら」の違い

    「げらげら笑う」と「けらけら笑う」が両方とも大声で笑うという意味でしょうか?それとも、何か違いがありますか? ご教授をお願いします。

  • OB訪問について

    就職活動中の学生です。 志望会社へのOB訪問についてお聞きしたい事があります。 先日、自分の大学で第一志望の会社の説明会があり参加しました。 その時にこられた方の担当している業務をここではAのaとします。 その説明会で会社の業務、その方の仕事については分かりました。 でも、私がその会社の中でしたい仕事は、Bのbだったため、 違う部署なら分からないかもと思い、仕事内容についてその時は 質問しませんでした。 しかし、やっぱり自分のする仕事がどういうものかを詳しく知りたい思い、ぜひ自分の希望する職種の人のお話を聞きたいと思っています。 でも、一度会社説明会があったにも関わらず新たに会社の人を紹介してもらうのは無理な事でしょうか? また、希望職種の方の紹介の依頼を人事部か、もしくは会社説明会の人に一度相談してからすべきなのかと迷っています。この方は、同じ大学の卒業生です。 会社説明会をされた方は、何かあったら言ってきてくださいとおっしゃってくれたんですが、それは社交辞令のようにも思えますし、また個別に会うOB訪問とは違って説明会に参加した学生というだけでそこまで相談するのは失礼かも、とこれも迷っています。 補足として、私の志望する会社はメーカーになるのですが、説明会のOBの方と私が希望する部署では、作っている製品が違います。 また、職種が違うというのは文系・理系という違いではなく、かなり近いもので私が希望しているBの部門についた場合、bではなくaの仕事をする可能性もあります。 分かりづらい説明で申し訳ありませんが、よろしくお願いします!

  • 下記の「あ」と「い」の違いを教えて下さい

    「津波の心配はありません」と「津波の心配はいりません」 この「あ」と「い」の意味の違いはありますか? 「ありません」と「いりません」 両方とも「無い」という意味だと思うのですが 使い方の違いもあれば、教えて下さい。 宜しくお願い致します。

  • 薔薇のない花屋のエンドロールについて

     薔薇のない花屋のエンドロール(山下達郎の歌が流れているところ)で,雪山のシーンがありますが,ドラマの内容とは関係がなさそうに見えたのですが,実は何か意味があるという話を聞きました。  どういう意味があるのかご存知の方教えてください。

  • end of lifeとobsolete

    end of lifeとobsoleteはどちらも製造終了や販売終了という意味かと思っていましたが、次のような場合、この2つの言葉にはどういう違いがあるのでしょうか? “The product becomes ‘end of life’ (it will be manufactured for 2 years) but not obsolete.” よろしくお願いいたします。

  • パイレーツ~ワールドエンドの台詞字幕と吹き替え 

    字幕と吹き替えと英語(オリジナル)で、意味が微妙に 違ってくるのって、ありますよね? パイレーツ・オブ・カリビアン ワールドエンドのジャックの台詞に ついてです。映画館で字幕と吹き替え両方観て、未だに気になっているので質問します。終わりの方でエリザベスがブラックパールから去る (ボートに乗る前の)シーン、順に挨拶をし、最後にジャックに エリザベスが「私たちは、結ばれる運命じゃなかったのよ。」 といった内容を言い、そのあとジャックが (字幕では)「そう思い続けるんだな。」 (吹き替えでは)「本当は、そうじゃないんだろ。」 と言っています(少し違うかもしれませんが)。 ずいぶん意味が違ってくると思うのですが、どちらが、 英語の台詞のニュアンスに近いですか? よろしくお願いします。