動作確認環境
- 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 の動作に必要な設定も併せて行います。
[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の設定
Preferences > Languages & Frameworks > PHP > Debug
を開き、Xdebug のポートを9001
に変更します。-
Preferences > Languages & Frameworks > PHP > Debug > DBGp Proxy
を開き、以下のように設定します(Host はIPでもドメイン指定でもOK。ただし、設定全体で統一しておきます)。 -
Run > Edit Configurations...
を開いて「+」からPHP Web Application
を追加し、以下のように設定しておきます(Start URL
は CakePHPの場合ですので置き換えてください )。 同画面上にある
Server
の「…」を開き、VPSの設定追加とFile/Directory
(ローカルパス)とAbsolute path on the server
(VPS上の絶対パス)のマッピングを行います。マッピングが正しくないと breakpoint 張っても止まらないので注意してください(CakePHPの場合、webroot の index.php にも明示的にマッピングしたほうがいいかもしれません)。
なお、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