8

私は、評価のさまざまな段階 (開発/テスト/ステージングなど) のために、さまざまな環境で Web サイトをセットアップする任務を負っています。

ただし、ステージング環境では、PHP スクリプトの終了を妨げる何らかの違いがあるように思われるため、ページはブラウザーに配信されません。

接続の切断時に何らかのスタック トレースまたはバックトレースをログに出力する方法があるかどうか、またはスクリプトのライフ サイクルの特定の時点で PHP が正確に何を行っているかを調べる方法が他にあるのではないかと考えています。

これは Drupal サイトなので、私がよく知らないコードがたくさん含まれておりdie;、スクリプトがどこにロードされているかを確認するためにコマンドをあちこちに散りばめるのに何時間もかかる可能性があります。

おそらく環境の違いを確認する必要があることは理解していますが、すべての構成が非常に似ている必要があり (Ubuntu 11.04)、この特定のサイトが終了を拒否している間、ステージング環境は他の PHP サイトを提供することに完全に満足しているようです。どちらかといえば、このステージング サイトには、問題のない他の環境よりも多くのリソースが利用可能です。

更新:申し訳ありませんが、最終的に問題が見つかりました。ステージング環境は、パブリック IP 経由で自分自身にアクセスすることを許可されていない VLAN 上にあり、何らかの理由で (これについてはまだ混乱しています)、ページの読み込みの一部として自分自身にアクセスしようとしていて、要求を完了することはありませんでした。127.0.0.1 のホスト ファイル エントリを設定すると、問題が修正されました。

4

2 に答える 2

3

xDebugなどのツールを使用してこのような問題を段階的にデバッグすることはオプションですが、おそらく長い時間がかかります-ブレークポイントを配置する場所を見つけることは、dieステートメントを配置する場所を見つけることとほぼ同じレベルになりますコードの周り。デバッガーオプションはそれを行うためのより良い方法ですが、大量の未知のコードのどこかに未知のブロッカーがあるこのような問題がある場合、比較してあまり節約できません。

ただし、xDebugには、プログラムの実行中に呼び出された関数、それらにかかった時間、およびボトルネックがどこにあるかを強調表示できるプロファイラーツールもあります。これはおそらく開始するのに適した場所です。プロファイラートレースを生成するようにxDebugを構成してから、kCacheGrindを使用してグラフィカル環境でトレースを表示するだけです。

プログラムがループに陥っている場合、または特定の何かが完了するまでに長い時間がかかる場合、これは問題をほぼ即座に特定します。どの関数が時間がかかっているか、そしてその関数に到達するためのコールチェーンがどのように見えるかを正確に確認できます。

それを見たら、関連するコードを見るだけで問題を見つけることができる可能性は十分にあります。ただし、それができない場合は、xDebugのステップスルーデバッガーを使用して、実行中の関数を分析し、変数がどのように設定されているかを確認して、ループしている理由を確認できます。

xDebugはここにあります:http ://www.xdebug.org/

于 2013-02-28T11:04:33.903 に答える