PHP でスクリプトが直接実行されたか判定する方法
公開:
更新:
PHP で、そのスクリプトが直接実行されたのか判定し処理を変える方法を紹介します。この方法を使うと、Python の if __name__ == "__main__"
と同等の分岐が可能です。
やり方としては、バックトレース1を配列で返す debug_backtrace
関数を使用します。トップレベル環境においては、この配列が空であるはずなので、それを確認することで判定します。
PHP では、関数呼び出し以外に include
などでもスタックが積まれるので、それを利用しています。
if (debug_backtrace()) {
// 他のスクリプトから include されているとき
} else {
// このスクリプトが起点となっているとき
}
他スクリプトから include
されているときは値を return
する2けれど、直接実行の場合は自分で出力を生成するように分岐するなどの応用方法があります。
if (debug_backtrace()) {
return "foo";
} else {
header("Content-Type: text/plain; charset=UTF-8");
echo "bar";
}
関数内でバックトレースを取得すると、上手くいかない点に注意してください。