2011-12-04 11 views
2

関数では、出力バッファリングコールバックから呼び出されたかどうかを知る方法はありますか?関数が出力バッファリングコールバックから呼び出されたかどうかを確認するには?

function foo() { 
    if (magic here ????) 
     $log->write("foo:Callback") 
    else 
     $log->write("foo:Normal") 
} 

function calls_foo() { 
    ...stuff 
    foo(); 
} 

calls_foo() // should log foo:Normal 

ob_start('calls_foo') 

    ...stuff 

// should log foo:Callback at the end of the script 
+0

汎用ソリューションが必要ですか?それ以外の場合は、foo($ calledBy = xxx)にパラメータを追加してcalls_foo()に設定することができます。 – Nebel54

+0

何をしているのかは、私には維持できないという危険な混乱のようです。そのようなことをデバッグするのは幸運です。 – middus

+1

@ Nebel54:私は関数を呼び出すコードを制御できません。関数だけを変更することはできます。 – georg

答えて

2

チェック$debug = debug_backtrace()。デバッグ配列が1の場合、mainから呼び出されます。これは、リクエストの最後に呼び出されるobコールバックであることを意味します。次に、配列を反復処理して、obフラッシング関数の各配列の'function'キーを調べることができます。

+0

ありがとう!私はより洗練されたソリューションを望んでいましたが、これが唯一の方法だと思われます。 – georg

2

機能ob_get_status()は、出力バッファリングの現在のステータスに関する情報を含む配列を返します。

関連する問題