2

各ファイルの最初と最後でユーザー定義関数を自動的に呼び出したいのですが。これには、要求されているスクリプトと、そのスクリプト内の各インクルードが含まれます。

これの目的は、各ファイルの実行にかかる時間をログに記録するデバッグツールを作成することです。各ファイルの開始時と終了時のマイクロタイムは、スクリプト実行の終了時に結果を報告するために保存されます。

[編集]私はxhprofとxdebugを見て時間を過ごしました

Xdebugは実行時にオンとオフを切り替えることができないため、機能しません(現在のデバッグシステムでは、URLで属性を渡すことができます。これにより、デバッグがセッション変数としてオン/オフになり、最終的にページの下部にプロファイリングデータが表示されます。ロード後-これは非常に便利です)

Xhprofの方が近いですが、各関数呼び出しを分割したり、プロファイリング要素に添付する追加のデバッグ情報を渡したりすることはできません。たとえば、すべてのクエリに使用するmysqlクエリのユーザー定義関数があります-実際のクエリをプロファイル要素に渡して、ページ内の重いクエリと軽いクエリを識別できるようにします(クエリをログに記録できることはわかっています)また、この要件からどのように利益を得ることができるかを示したかっただけです)。もう1つの例は、着信、発信関数データ、および追跡したいその他のデバッグ情報をプロファイル要素に添付することです。

現在、共通の関数にデータを送信するすべての関数にコード行を配置し、グローバル変数に保持して、スクリプト出力に続いてデバッグデータとして吐き出すことにより、開始時間、終了時間、追加のデバッグ情報を手動で追跡しています。これをスクリプト、テンプレートなどに拡張します。すべての関数、スクリプト、テンプレートにデータを手動で入力することは、避けたいと思っています。各関数に固有のデータの一部に対して実行する必要があると思いますが、繰り返しのもの(開始時間、終了時間)をすべての悪臭を放つクエリに入力する必要はありません。

4

6 に答える 6

3

コードのデバッグに役立てるために、代わりにXdebugをチェックアウトすることを強くお勧めします。これを自分で行うことは、あなたを狂わせるだけです!

Xdebugは、箱から出してすぐに機能トレースを実行できます。

例えば:

// start tracing function calls to file
xdebug_start_trace('/path/to/trace_file.txt');
// your code here
xdebug_stop_trace();
于 2012-12-16T14:59:08.457 に答える
2

コマンドライン:

これはかなり素晴らしいです:

echo <file_to_execute> | php \
  -B '$start = microtime(true);' \
  -E '$stop = microtime(true); echo $stop-$start;'

これは、PHPではほとんど使用されない2つのオプションとを使用し-Bます-E。最初のオプションでは、処理前に実行されるコードstdin(この場合は実行するファイル)を指定できます。2番目のオプションでは、ファイルが終了したときに実行されるコードを指定できます。

退屈なphp.ini設定:

さらに、同じことを設定auto_prepend_fileして実行することもできます。auto_append_file完全を期すためにここで言及し.iniますが、この種の設定を変更することは、それが悪いという証拠はありませんが、間違っていると感じます。

ホットスポットのプロファイリング:

実行速度が遅いスクリプトを特定した場合は、xhprofを使用して、ほとんどの時間をどこで費やしているかを把握できます。これはFacebookで開発されたツールですが、現在はオープンソースです。これは、インストールの手間を軽減するのに役立つPECL拡張機能として利用できます。

実際のデバッグ:

XDebugは、コードを1行ずつ、関数ごとにステップ実行できるすばらしいツールであり、あらゆる種類のことを実行できます。単にコード実行のタイミングを計っている場合は、XDebugを使用しませんが、実際にコードをデバッグしようとしている場合は、この拡張機能が最適です。


あなたの編集について:

私はあなたがこれをすべて間違っていると思います。ライブサーバーと開発サーバーの2つの環境が本当に必要です。ライブサーバーにはxhprofまたはxdebugがありませんが、開発サーバーには必要なものがあります。

于 2012-12-16T15:14:00.117 に答える
1

Xdebugに加えて、本当に優れていて使いやすいXHProfがあります。

于 2012-12-16T15:34:35.613 に答える
1

php.iniファイルauto_prepend_fileauto_append_fileオプションを使用します。Iqbalの回答でタイミングをとるファイルをそれらにポイントします。

于 2012-12-16T14:59:09.590 に答える
0

$ time_start = microtime(true); //Webページの先頭に配置

//PHPコード

echo microtime(true)-$ time_start; //Webページの最後に配置

于 2012-12-16T14:55:13.830 に答える
0

少しrequire関数を書いてみませんか?

index.php、あなたはすることができます<?php require('requirer.php'); myRequirer(array('script1', 'script2'));

次にrequirer.php

<?php

require('file_with_logger_function');
function requirer($requireFiles)
{
    my_logger_function();
    foreach($requireFiles as $fileName) {
        require($fileName.'.php');
    }
    my_logger_function();
}
于 2012-12-16T14:59:55.660 に答える