名古屋出身ソフトウェアエンジニアのブログ

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";
}

関数内でバックトレースを取得すると、上手くいかない点に注意してください。


  1. 他言語でいうスタックトレース。 ↩︎

  2. 忘れがちですが、PHP では include 元に対して値の return が可能です。 ↩︎