LoginSignup
2
0

More than 5 years have passed since last update.

【PHPStorm】VPS上のWebアプリケーション(CakePHP)をリモートデバッグする

Posted at

動作確認環境

  • MacOS Sierra(開発PC。PHPStorm側)
    • Homebrew php71
    • Homebrew php71-xdebug
    • ブラウザ: Google Chrome, Firefox

※ おそらく開発PC側でのXdebugインストール有無は関係ない?

  • CentOS7.3(VPS側。リモートデバッグ対象)
    • PHP 7.1.2
    • Xdebug v2.5.5
    • CakePHP2.9

Xdebugのインストール

$ sudo pecl channel-update pecl.php.net
$ sudo pecl install xdebug

### インストール完了後に以下のようなメッセージが出力されます ###
# Build process completed successfully
# Installing '/usr/lib64/php/modules/xdebug.so'
# install ok: channel://pecl.php.net/xdebug-2.5.5
# configuration option "php_ini" is not set to php.ini location
# You should add "zend_extension=/usr/lib64/php/modules/xdebug.so" to php.ini

実行権限が無い状態(644)でインストールされるのでパーミッション変更しておきます。

chmod 755 /usr/lib64/php/modules/xdebug.so 

Xdebug の有効化

インストール完了後の指示どおり、php.ini にパスを追加します。
Xdebug の動作に必要な設定も併せて行います。

php.ini
[xdebug]
; パスは適時置き換え
zend_extension=/usr/lib64/php/modules/xdebug.so

xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001
xdebug.idekey="PHPSTORM"

xdebug.remote_portのデフォルトは9000ですが、php-fpmと被るのでここでは9001に変更しています。
以下コマンドで設定が正常に反映されたことを確認して、Webサーバを再起動しておきます。

$ php -i | grep xdebug
# …中略…
# xdebug support => enabled

$ systemctl restart httpd

PHPStormの設定

  1. Preferences > Languages & Frameworks > PHP > Debug を開き、Xdebug のポートを 9001 に変更します。

  2. Preferences > Languages & Frameworks > PHP > Debug > DBGp Proxy を開き、以下のように設定します(Host はIPでもドメイン指定でもOK。ただし、設定全体で統一しておきます)。

    php-storm-vps01.png

  3. Run > Edit Configurations... を開いて「+」から PHP Web Application を追加し、以下のように設定しておきます( Start URLは CakePHPの場合ですので置き換えてください )。

    php-storm-vps03.png

  4. 同画面上にある Server の「…」を開き、VPSの設定追加と File/Directory(ローカルパス)と Absolute path on the server(VPS上の絶対パス)のマッピングを行います。マッピングが正しくないと breakpoint 張っても止まらないので注意してください(CakePHPの場合、webroot の index.php にも明示的にマッピングしたほうがいいかもしれません)。

php-storm-vps02.png

なお、Apache側で https に強制リダイレクトするような設定がされてあったとしても、ポート番号は80のままでOKです。

Mac OS(開発PC側)の設定

9001 番ポートをSSHポートフォワード(SSHトンネリング)しておきます。

ssh -R 127.0.0.1:9001:127.0.0.1:9001 user@test.example.com

VPSに接続後、nmap が使えるなら以下のコマンドで 9001 番ポートが使用されていることが分かります。

nmap localhost
# PORT     STATE SERVICE
# …中略…
# 9001/tcp open  tor-orport

また、Mac OS側では以下のコマンドで確認が可能です( PHPStorm 上でのデバッグ最中のみ開放されるため、現段階では表示されません )。

sudo lsof -i -P | grep "LISTEN"
# …中略…
# phpstorm  ……  TCP *:9001 (LISTEN)

デバッグの実行

任意の行番号に breakpoint を張っておき、Run > Debug を実行します。すると、指定のブラウザが立ち上がりますので、設定が正しければデバッグすることが可能です。この際、URLのQueryStringにはXDEBUG_SESSION_START=XXXXXというパラメータが付与されています。

その他の検証

  • Apacheで mod_security が有効でもデバッグ可能?

    • 可能です
  • VPS側で 9001 番ポート開放しなくていいの?

    • SSHポートフォワードで事足りているため開放不要です
    • PHPStorm の Start Listening for PHP Debug Connections(電話マーク)もアクティブにする必要はないです
  • 公式のブックマークレットは使わなくていいの?

    • 不要です

参考記事

PHP SSHの逆ポートフォワードごしにリモートデバッグする | ytyng.com
macでLISTENとして使用しているポートを調べる方法 - Qiita

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0