3

機能が強すぎて、安定性や性能が心配です。

どう思いますか?

アップデート

私がやっていることはこれです:

    $old_dir = getcwd();
    chdir( dirname($included_file) );
    include ( $included_file );
    chdir( $old_dir );

基本的にはそうするだけですがinclude ( $included_file );、その中で$included_fileそれ自体が入っているのと同じディレクトリにあるものを見つけることができない3.phpので、手動でcwdを設定して動作します.しかし、見つからない理由を見つけたらいいと思います. . なぜdebug_backtrace必要なのかというと、相対パスが機能しないため、3.php別のものに含まれているためです.funcdebug_backtrace

上記のコードはメソッドのコンテキスト内にあるため、再現するのは簡単ではありません..他の誰もこのような問題に遭遇していない場合は、ここでやめたいと思います.とにかく、コストはわずか3余分です.行、大したことではありません。

4

3 に答える 3

6

debug_backtrace私の経験では比較的高価なので、ループで使用されないように注意する必要があります(たとえば、警告または通知をキャッチし、毎回バックトレースを実行するカスタムエラーハンドラーで)。

あらゆる種類のエラーロギングにとって、これは非常に貴重だと思います。また、呼び出されるのは1回だけなので、パフォーマンスの問題ではありません。エラーレポートにバックトレースを含めることは確かに常に良いことです。

この関数の安定性に特定の問題がある理由がわかりません(つまり、関数を呼び出すと別のクラッシュが発生します)。問題について聞いたことがありません。私が見ることができる唯一の「落とし穴」は、メソッドが定義されていない関数パラメーターとしてオブジェクトを使用する場合のユーザー寄稿ノートのこのノートです。_toString

もちろん、バックトレースの結果をエンドユーザーに出力しないでください。言うまでもありません。

于 2010-03-13T13:10:18.613 に答える
1

ええと、その名前を考えると、アプリケーションの「通常の」部分として使用するかどうかはわかりませんが、良いか悪いかを述べたものを読んだことを覚えていません。


「深刻な使用」についてあなたが何を意味するのかよくわかりませんが、

  • アプリケーションが機能するためにその機能が必要な場合は、設計に問題があることを示している可能性があります
  • この関数は、エラーが発生した方法/場所をログに記録したい場合に、エラーハンドラーで役立ちます。エラーの原因を追跡する場合に、ログファイルがより便利になります。

ただし、「エラーログ」が深刻な使用法の定義に対応するかどうかはわかりませんか?

于 2010-03-13T12:53:32.093 に答える
0

わかりました、私の理解から、問題は次のとおりです

あなたはphpファイルを持っています、それを「main.php」と呼びましょう。「main.php」には、あるディレクトリの「A.php」が含まれています。

# in "main.php"
include '/some/dir/A.php';

次に、A.phpには、A.phpと同じディレクトリにある「B.php」が含まれます。

# in "A.php"
include 'B.php'; 

問題:「/ some / dir /」(AとBが存在する場所)は「main.php」の現在のものではないため、phpB.phpA.php

解決策:A.phpへの絶対フルパスを使用し/some/dirます。ハードコーディングするか、を介して動的に取得しますdirname(__FILE__)

# in "A.php"
include dirname(__FILE__) .'/B.php';
于 2010-03-13T14:43:24.413 に答える