忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/07/23 19:50 |
PHP1-77:出力バッファリング

基本的にPHPはprint()とかecho()とか書いた時点で文字が出力されますが、小出しに出力せずにバッファに保存しておいて、後で一気に出力、なんてことができます。

ob_start.php 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    
    //出力バッファリングスタート
        ob_start();
    //printしても表示されずバッファに入れられる
        print('example');
    //バッファリングを終了した時点でバッファが表示される
        ob_end_flush();
    
    
    //引数に関数を入れると、ob_end_flush()時に呼ばれる
        ob_start('htmlspecialchars');
    //printしても表示されずバッファに入れられる
        print('<br />');
    //バッファの内容がhtmlspecialcharsされて表示される
        ob_end_flush();
    
    
    //出力バッファリングスタート
        ob_start();
    //printしても表示されずバッファに入れられる
        print('hogehoge');
    //現在のバッファの内容を取得
        $tmp=ob_get_contents();
    //バッファを削除してバッファリングを終了
        ob_end_clean();
    //$tmpには、ob_start()~ob_get_contents()までに出力した内容が含まれる
        var_dump($tmp);


こんなふうに出力をためておくことができます。
ただこれ、どういう場合に使えばいいのかいまいちよくわからない。

http://www.ideaxidea.com/archives/2008/04/phpob_start.html
こちらでは文字コードをまとめて変更して出力、というのが紹介されていて一見便利そうに見えますが、このような書き方はわかりづらいのでそもそも根本的に行わない方がいいと思います。
変換処理はコントローラあたりに追い出したいところです。
まあ、MVCに分ける程でもない小規模なものならばこれで十分かもしれませんが。

 

PR


2009/05/25 18:51 | Comments(0) | TrackBack(2) | PHP

トラックバック

トラックバックURL:
配列を丸ごと保存して後で内容を確認したいとかいう場合、実はいまいち便利な関数がありません。 その場で表示するならvar_dump();するだけで中身を全部表示してくれますが、この関数、結果を返り値として受け取ることができません。 implode()は一次元配列しか使えませんし、serialize()だとPHPではわかりやすくても人間の目にはわかりづらくなってしまいます。 Pear::XML_Serializerに突っ込めば簡単にXMLになりますが、単に配列を表示したいだけなのにPearだのXM...
弱小PHPerの憂鬱 | 2009/06/30 19:38
> Zend_Debug::dump() メソッドが、PHP の関数 ≫ var_dump() をラップしたものであることを理解すると有益でしょう。 ということでvar_dumpが少々見やすくなります。 中身はvar_dumpを出力制御で奪い取って正規表現で装飾してるだけという単純な内容でした。 クラス名を見て期待していたリフレクションなんかは全く行ってくれないようです。 オブジェクトなら勝手にリフレクションしてくれるようなvar_dump()を期待してたのに。残念。 ...
弱小PHPerの憂鬱 | 2010/05/17 22:44

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-78:APCキャッシュ | HOME | PHP1-76:PHPでページャーつづき>>
忍者ブログ[PR]