
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で質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) マイナンバーカードの撮影をしてその画像ファイルを削除しましたが、その時にCC Cleaner, Cc 3 2022/10/20 06:09
- TOEFL・TOEIC・英語検定 ②が正解らしいのですが、clean your room 綺麗なあなたの部屋とOとみてあげてclean 3 2022/07/06 03:51
- 数学 数学(三角比) 四面体OABCについて、「OA=1」「OB=√2」「OC=2」「OA⊥OB」「OB⊥ 1 2023/02/13 21:22
- 数学 数学 解答三行目の →OC=−(→OA+→OB) −(→OC)=→OA+→OB にして計算していって 2 2023/08/09 13:48
- C言語・C++・C# Clean Cをおしえてください? C リファレンフマニュアル 1 2022/05/16 18:01
- ゴルフ ゴルフ初心者です。基本的なゴルフの事でなのですがプレイング4が無いホールのティーショットでOBを出し 4 2023/08/07 23:25
- 英語 次の文の解釈と訳を教えてください。 We asked the caretaker to clean 1 2022/12/20 10:53
- 数学 S/TのとこのSなんですが、S=1/2OA×OB×sin角AOBでOA×OBは1×1みたいなんですが 3 2022/05/30 12:53
- 数学 数学(ベクトル) ベクトルは「OA,OB」「a,b」と表しますが 「原点が同じOだから、OA=a,O 3 2023/04/09 21:09
- 数学 このようなベクトルOPをOA OBで表す問題でよく、図のようにs:1-sで置くと思うんですけど、AP 4 2022/08/08 10:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php 3文字を抽出して配列へいれ...
-
webroot以外の画像の表示
-
*.php、*.php3、*.phtmlの違い
-
php.iniって。。
-
同じような処理を一つにまとめたい
-
大量チェックボックスの実装方...
-
フォントの色を変えるには?
-
ファイル一覧表(LAN内の別PC)
-
PDOとmysql_real_escape_str
-
携帯サイトでフォームタグとラ...
-
HTMLページにPHPで処理した結果...
-
テルネットしコマンドを自動実行
-
php + postgre で接続できない
-
PHPでHTMLソースの<img src="★"...
-
FTPコマンドでディレクトリごと...
-
外部ファイルを読み込んだhtml...
-
さくらインターネットでメール...
-
クーロン設定について
-
モバイルのアドレスはPCとお...
-
requireやinclude時の階層の書き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPSpreadsheetによる書き出し...
-
CSV出力にHTMLが入ってしまう
-
TCPDFについて
-
PHPにおける時間計算、時間足し...
-
webroot以外の画像の表示
-
¥マークを出力したいがバック...
-
リダイレクト元のURLの取得方法...
-
PHPで取得したHTML内のdiv要素...
-
ImageStringで日本語表示させたい
-
Whileループ時の改行?
-
バイナリファイルをブラウザに...
-
GDで画像表示
-
json_encode日本語表示/PHP5.2.5
-
mPDFでのPDF出力がうまくいかな...
-
PHPとTwitter Bootstrap
-
文字化け
-
ヒアドキュメント 前にタブを...
-
warningを画面に表示させない設...
-
フィルタリングとバリデーショ...
-
【PHP】関数で処理が止まってる...
おすすめ情報