コマンドラインのPHPスクリプトでXDebugプロファイラーをトリガーする方法


194

XDebugは、HTTP経由でスクリプトを呼び出すときにGETまたはPOSTパラメーター「XDEBUG_PROFILE」を渡すことでプロファイリングをアクティブ化できるようにする構成ディレクティブ「xdebug.profiler_enable_trigger」を提供します。これは、すべてのスクリプトのプロファイリングを望まないが、常にPHP構成を変更せずに、いくつかの特別な場合にのみ役立つ場合に便利です。

コマンドラインPHPプログラムで同じ動作を実現する方法はありますか?「XDEBUG_PROFILE」をコマンドライン引数として渡そうとしましたが、機能しませんでした。

一般的に、コマンドラインPHPのプロファイリングはうまく機能しますが、ブラウザーやHTTPサーバーと同じように呼び出しごとの柔軟性を持たせたいと思います。

助言がありますか?


申し訳ありませんが、私もこれを試していますが、取得できません。「XDEBUG_PROFILE」パラメーターには何が必要ですか?
Andresch Serj

パラメータが存在する限り、パラメータの内容は関係ありません。
selfawaresoup

XDEBUG_PROFILE環境変数のサポートの欠如は、XDebugバグトラッカーのバグ413です。
2013年

回答:


257

-dフラグでINI設定を渡すことができます:php -d xdebug.profiler_enable=On script.php


39
* nixベースのシステムでは、次のようなエイリアスを作成することで、これを少し使いやすくすることができますalias phpp="php -d xdebug.profiler_enable=1"。そうすれば、プロファイルを使いたくないphpときや、を使用するときにだけ使用できますphpp
JC Yamokoski

14
プロファイラーの出力を保存するディレクトリも指定する必要があったので、これで起動しましたalias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=."。これにより、常にデバッグ出力が現在の作業ディレクトリに保存されます。
LarsNyström

ええ、私はWin7環境でEclipseとXAMPPの下にいます。できます。
gouchaoer 2015

4
Windowsでは、PATH dirにphpp.cmdファイルを作成するphp -d xdebug.profiler_enable=On %*ことができますphpp <args>
Gras Double

43

私はこれをUbuntu / Netbeansで動作させました:

  • xdebug config行を/etc/php5/apache2/php.iniファイルから/etc/php5/cli/php.iniにコピーします
  • デバッグセッションの名前で環境変数を設定します(デバッグを開始するときにnetbeansが起動するページのURLにあるクエリ文字列から取得できます)コマンドは次のとおりです。export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

その後、それは単にnetbeansでデバッグを開始し、コマンドラインで「php myscript.php」を実行する場合です。


2
注:デバッガーをリッスンしたままPHPコマンドでトリガーしない場合は、「unset XDEBUG_CONFIG」を使用します。
Dan LaManna 2012年

これは実際には私にとってはうまく
いき

4
これはデバッグ(スクリプトのステップ実行)に関するものです。問題はプロファイリング(スクリプトのパフォーマンスの分析、どの関数に時間がかかるかなど)
に関するものでした

32

リモートWebサーバー上のPhpStormでは、次のコマンドを使用します。

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

ここでserver_name、PhpStormプロジェクト構成でのサーバーの名前を表します


5
これを.bash_aliasesに追加しましたalias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | カット-d \ "= \" -f 2 | awk '{print $ 1}' "だからデバッグしたいときはphpの代わりにxphpを使う
oliver nadj

18

Xdebugリモートデバッグページで説明されているように、XDEBUG_CONFIG「profile_enable = 1」ディレクティブを含めることで、環境変数を介してプロファイリングを有効にすることもできます。

XDEBUG_CONFIG="profiler_enable=1" php ...

これは最もアクセスしやすい方法であるため、受け入れられた答えになるはずです。PHPバイナリがラップされている可能性があり、触れたくない場所でインタープリター#!/ x / phpとして設定されている可能性があります。env変数を使用すると、選択的に有効にすることができます
John

11

VMでの開発中にNetbeansで動作させるための、似ていますが異なるプロセス。

リモート有効化フラグ、自動起動フラグ、IDEフラグ、およびリモートホストの名前を渡す必要があります。

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

4

クライアントのデバッグを処理するシェルスクリプトを作成しました。

スクリプト名:phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

このスクリプトを配置し/usr/binて、実行権限を与えました。

スクリプトは、phpdebugに渡された引数を受け取り、xdebug引数を使用してphpを呼び出し、シェルスクリプトに渡された引数、最後に$ *を追加します。


はい、とにかく私の場合は、リモートホストのINI設定を追加するだけで済みました。PHP CLIコマンドからIDEでデバッグを行うために必要なのはそれだけでした。
スペンサーウィリアムズ

実際には、XDEBUG_CONFIG環境変数も設定する必要がありました。それだけで、xdebug.remote_host設定が機能しました。
スペンサーウィリアムズ

2

PhpStorm 7でWAMPを使用して、すでに動作しているxdebug設定をC:\ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.iniからC:\ wamp \ bin \ php \のxdebugセクションにコピーすることでこれを機能させましたphpX.YZ \ php.ini。次に、次のようにスクリプトを実行しました。

php -d xdebug.idekey=PHPSTORM script.php

これはlaravel職人スクリプトのデバッグにも機能しました

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

0

Jetbrainsからのドキュメント

PHPコマンドラインスイッチを使用してデバッグを行うスクリプトを開始するにはXDebugにIDEに接続するように指示する環境変数を設定します。

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

ここでidekeyはランダムな値を持つ必要があります。

次のコマンドラインオプションを使用してPHPを起動します。

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

Vagrantでは、127.0.0.1ではなく10.0.2.2を使用できます(関連するSOの質問を参照)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.