0

次のように、コンテンツを表示する前に、コンテンツに対してカスタムの電子メール難読化クラスのObfuscate()関数を実行するスクリプトがあります。

ob_start(array($obfuscator, "Obfuscate"));
include('header.php');
print($html);
include('footer.php');
ob_end_flush();

それはすべてうまくいきます。ただし、ビューアーキテクチャを完全に書き直したので、クラス関数内から電子メールの難読化を実行し、その文字列を返す必要があります(その後echoedになります)。私は最初に上記を次のように書き直しました:

ob_start(array($this->obfuscator, "Obfuscate"));
include('header.php');
echo($this->content);
include('footer.php');
$wrappedContent = ob_get_contents();
ob_end_clean();

残念ながら、$this->obfuscator->Obfuscate()コールバックは発生していません。それ以来ob_get_contents()、コールバックを起動しないことを学びましたが、同様に無駄にしようob_get_clean()としました。ob_get_flush()

では、コールバックが発生した後、どうすればバッファの内容を取得できますか?

4

2 に答える 2

3

もちろん、コールバックを使用する唯一の理由は、コンテンツがフラッシュされる前にコンテンツob_start()を実行したかったためであるという事実を見落としていObfuscate()ましたが、そのコンテンツを取り戻す場合は、コールバックを実行する必要はありません。したがって、コールバックを使用せず、ob_get_clean()の結果を実行するだけでObfuscate()、私が望んでいたことを実行できます。ドー!

ob_start();
include('header.php');
echo($this->content);
include('footer.php');
return $this->obfuscator->Obfuscate(ob_get_clean());
于 2011-08-03T12:04:08.197 に答える
0

変化する

ob_end_clean();

ob_clean() 

トリガーします。

これは私が試したコードです

<?php
class Obfuscate {
    public function __construct() 
    {

    }

    public function getObfuscate()
    {
        return "obfuscate";
    }
}

class Example 
{
    public function hello( $obfuscator )
    {
        ob_start(array( $obfuscator, 'getObfuscate' ));
        include('header.php');
        echo "Thi is a content ";
        include('footer.php');
        $wrappedContent = ob_get_contents();
        ob_clean();
    }
}

$obfuscator = new Obfuscate();
$example = new Example;
$example->hello($obfuscator);
ob_clean();
于 2011-08-03T12:41:14.207 に答える