web-dev-qa-db-ja.com

PHPStormでphp artisanサーブをデバッグする方法は?

PHP Webページを開発するためにPHPStormを使用しています。Apacheサーバー、XDebug、および単純なWeb PHPプロジェクトで問題なく動作します。問題ありません。

しかし、Laravel 5.1 Webプロジェクトをphp artisan serveを使用してデバッグしようとすると、ブレークポイントをデバッグできません。php artisan serveが別のサーバーを使用するようなものです...

そして私のPHPStormで、私はいつも見ます:

IDEキー '(randomNumberHere)'で着信接続を待機しています

PHPStormですべてを構成し(リモートデバッグを有効にし、ポートを修正するなど)、「通常」でPHPプロジェクトはすべて正常に動作します。

何かを変更する必要があるかどうか誰かが教えてもらえますか?

ありがとう!

23
chemitaxis

php artisan serveを使用したデバッグは、iniファイルでデバッグを有効にしない限り機能しません。

@Bogdanが理由を指摘した。 artisan serveはPHP組み込みのWebサーバーを呼び出しますが、phpコマンドラインオプション(PHPStormではインタープリターオプションと呼ばれます)を渡しません)。

つまり、コマンドラインから実行する場合:

$ php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1 artisan serve

次に、-dによって指定されたこれらのオプションは、呼び出されたPHP組み込みのWebサーバーに渡されません。組み込みサーバーの呼び出し here を確認できます。

PHPStormの回避策は、PHPビルドインWebサーバーを直接呼び出す実行構成を作成することです。

  1. 実行->構成の編集...を開きます。
  2. 新しい「PHPビルドインWebサーバー」を作成する
  3. 値を設定します。

    • ホスト:localhost
    • ポート:8000
    • ドキュメントルート:Laravelの公開カタログを選択
    • Use route scriptを確認し、Laravelプロジェクトのルートディレクトリにあるserver.phpを選択します。
    • 通訳オプション:-dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1
  4. OK、実行します。

これで、PHPStormは、追加のインタープリターオプションを使用してphp artisan serveと同じコマンドを実行します。実際、php artisan serveの唯一の目的は、server.phpをPHPビルドインWebサーバーに追加することです。server.phpは、Apacheのmod_rewrite機能をエミュレートするだけです。

更新:@ attila-szeremiからの良いリマインダー:「PHP Debug Connectionsのリッスンを開始」が有効になっていることを確認してください。 t「Debug」を使用してPhpStorm構成を実行する

34
raigu

私はphpstormを使用していませんが、おそらくnetbeansでのデバッグに使用するソリューションが役立つでしょう。

職人サーブは、Webコンテナーによって読み込まれたものとは異なるiniファイルを使用します

入力してこれを見つける

php --ini

私のubuntuボックスでは、次の場所にあります

Loaded Configuration File:         /etc/php/7.0/cli/php.ini

Cli環境に合わせてiniを編集し、Webコンテナーで有効にするために使用したのと同じ構成を使用します。

例...

[Zend]
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_Host=127.0.0.1
xdebug.remote_port=9000

これに関する唯一の警告は、これを設定している限り、php cliを使用する他のことに影響を与えるということです。

追加メモ

デバッグセッションを常に自動的に開始する場合(たとえば、CLIのデバッグ時にURL要求パラメーターXDEBUG_SESSION_START = nameを介してリモートデバッグを開始するのではなく)、この追加構成で常にリモートデバッグセッションを開始するようにXDEBUGを設定できます。

xdebug.remote_autostart = 1

https://xdebug.org/docs/all を参照してください

通常、リモートデバッグを開始するには、特定のHTTP GET/POST変数を使用する必要があります(リモートデバッグを参照)。この設定が1に設定されている場合、GET/POST/COOKIE変数が存在しない場合でも、Xdebugは常にリモートデバッグセッションを開始してクライアントに接続しようとします。

5
Josh

したがって、JeffryのBe Awesome in PhpStormを経由した後、私はOPと同様の状況で立ち往生していました( XdebugとLaravelに関する章)。私はブレークポイントを設定していましたが、PhpStormはそれらのポイントに従って実行を中断できませんでした。そして、正直に言うと、ここでのジョシュの回答は問題を理解するのに多少役立ちましたが、私には十分に明確ではありませんでした。それで、私は外に出て、ヒットとトライアルの方法によって自分自身で解決策を見つけました、それは私が共有したい最後の解決策です。それはまだ疑問に思っている一部の人々にとって重宝するでしょう。

まず、OPが言ったり推測したりしたように、php artisan serverdoes別のサーバーを使用します。これは、PHPの組み込みWebサーバーplusserver.phpルーターファイルです。そして、使用する構成はCLI構成です。 php --iniを試して、含まれているすべての構成を見つけてください。

私の場合(Ubuntu 17.10)、含まれているXdebug構成ファイルは/etc/php/7.2/cli/conf.d/20-xdebug.iniの場所からのものでした。リモートxdebugを有効にするために2行目を追加すると、ファイルは合計2行で次のようになります。

zend_extension=xdebug.so xdebug.remote_enable=1

次にPhpStormを構成します。

  1. Run> Edit Configurationsに名前を付けるか、そのままnnamedのままにします
  2. Server:オプションの後に...をクリックします
  3. +をクリックして、任意の名前を付けます(例Laravel App
  4. Host as localhostPort as 8000およびDebugger as Xdebugを設定し、他のチェックマークはチェックされていません!
  5. Apply/OKをクリックします
  6. Server:のドロップダウンリストから、先ほど設定したものを選択します。
  7. 開始URL:デバッグを開始するURLを設定します(例:\user
  8. 使用するブラウザを選択します。
  9. Apply/OKをクリックします

デバッガは、実際のWebサーバー(php artisan serverコマンドで起動するサーバー)の起動後にのみ機能することに注意してください。

ここで、Webサーバーを起動します。 php artisan serveとPhpStormでRun> Debug 'your-debug-config'をクリックすると、すべて正常に動作します。

1
Anup Dhakal

パート1実行>構成の編集

pHP-BuiltIn Webサーバーを選択し、Host:localhost Port:8000 //または使用しているものを設定します

enter image description here

OKをクリックします

パート2 XdebugヘルパーのインストールChrome拡張機能

enter image description here

Chromeブラウザでは、右上隅にバグアイコンが表示されているはずです。クリックして[デバッグ]を選択すると、灰色のバグアイコンが緑色に変わります。

enter image description here

Php artisan serveを実行してデバッグチェックポイントを設定すると、

enter image description here

そして、電話アイコンをクリックして、「Xdebug接続のリッスンを開始」してください。

enter image description here

デバッグチェックポイントをキャッチする必要があります

1
lewis4u