Symfoware

Symfowareについての考察blog

PHPで関数の呼び出し元を調べ、ログファイルに出力する

phpの関数がどこから呼び出されているのか知りたいことがあります。
「debug_backtrace」を使用すればやりたいことが実現できそうです。

http://php.net/manual/ja/function.debug-backtrace.php


まず、debug_backtraceで呼び出し元の情報をarrayで取得。
その後、
PHPでarrayの内容を文字列で取得する(var_export)
ここで試した方法でarrayから文字列に変換。
テキストファイルに出力します。


まず、呼び出し元を調べたい関数を定義したファイル。

・lib.php


  1. <?php
  2. // lib.php
  3. function lib_test() {
  4.     // 関数の呼び出し元を調査
  5.     $trace = var_export(debug_backtrace($limit = 2), true);
  6.     // ファイルをオープンして差を出力
  7.     $fp = fopen('log.txt', 'a');
  8.     fwrite($fp, $trace."\n");
  9.     fclose($fp);
  10. }




debug_backtraceは、適当にlimitをつけて呼び出しました。
つけていないと、フレームワークを使用している場合は
恐ろしい数の呼び出し元を取得してしまい、現実的な速度で動きません。


テスト用に、このlib.phpにあるlib_test()を呼び出すプログラム。

・sample1.php


  1. <?php
  2. // sample1.php
  3. require_once('lib.php');
  4. lib_test();





・sample2.php


  1. <?php
  2. // sample2.php
  3. require_once('lib.php');
  4. lib_test();







sample1.phpにアクセスするとこんなログ。


array (
0 =>
array (
    'file' => '/usr/share/nginx/www/sample1.php',
    'line' => 7,
    'function' => 'lib_test',
),
)




sample2.phpにアクセスするとこんなログが表示されるはずです。


array (
0 =>
array (
    'file' => '/usr/share/nginx/www/sample2.php',
    'line' => 7,
    'function' => 'lib_test',
),
)


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/08/30(土) 18:27:37|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<jQuery 要素をeachしている中で、continue、breakする方法(Illegal continue statement ) | ホーム | PHPで処理の実行速度を計測し、ファイルに出力する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1474-6daf2350
この記事にトラックバックする(FC2ブログユーザー)