この記事は公開から3年以上経過しています。
さくらのレンタルサーバ(スタンダードプラン)で稼働するPHPを、ssh逆ポートフォワーディングさせてローカルのVSCodeからリモートデバッグする方法。WordPressプラグイン開発時にも利用できます。
PHP.iniの設定やファイルシステムの操作を誤るとWEBサイトが機能しなくなったりデータが喪失する恐れがあります。
必ずスナップショットをとるなど、復旧ができるようにバックアップしてから作業してください(At Your Own Risk)。
VSCodeでPHPをデバッグするにはPHP Debug
拡張のようなデバッガのインストールが必要です。また、本説明ではドキュメントルートをwww
としているため、ドキュメントルートを変更している場合はご自身のサーバー環境設定に適宜読み替えてください。
対応手順
-
レンタルサーバコントロールパネル
からサーバ情報
で以下の画面を開き、サーバーのIPアドレスをメモする(本例はIPv4接続)。 -
ローカルコンピューターでターミナルを開き以下のコマンドを実行する。
ssh サーバーのユーザー名@手順1のIPアドレス
-
パスワード入力を求められたらサーバーのパスワードを入力する。
sshログインできると以下のようなログインメッセージが表示されてユーザープロンプト表示になる。
Last login: Sun Jan 10 08:34:34 2021 from 接続元ホスト名 FreeBSD 9.1-RELEASE-p24 (SAKURA**) #0: Thu Feb 5 10:03:29 JST 2015 Welcome to FreeBSD! %
-
以下のコマンドでソースビルド用ディレクトリにXdebugのソースを準備する。
(バージョンは2021.1.10時点の最新)mkdir src cd src wget https://xdebug.org/files/xdebug-3.0.2.tgz tar zxfv xdebug-3.0.2.tgz cd xdebug-3.0.2
-
以下のコマンドでXdebugのソースビルドとインストールを行う。
phpize ./configure make mkdir -p ~/local/lib/php/extensions/ cp modules/xdebug.so ~/local/lib/php/extensions/
-
レンタルサーバコントロールパネル
から、スクリプト設定
→PHP.ini設定
で以下の画面を開き、php.iniの既存項目に続けて以下の情報を入力したら保存する
を押下して設定を登録する。[Xdebug] zend_extension=/home/{サーバーユーザー名}/local/lib/php/extensions/xdebug.so xdebug.mode=debug
-
以下のコマンドでXdebugの拡張モジュールが読み込まれているか確認する。
php -c ~/www/php.ini -m
Xdebugが正常にインストール&設定できていれば、以下のように表示される。
[Zend Modules] Xdebug
-
VSCodeのPHPデバッグ用の
launch.json
のconfigurations/port
を9003
、configurations/pathMappings
にサーバーのソースディレクトリパス
とローカルのソースディレクトリパス
のマッピング情報を設定する({$workspaceRoot}はVSCodeで開いているフォルダを示す置換変数)。pathMappingsが正しく設定されていないと、ブレークポイントにヒットしません。
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/home/{サーバーユーザー名}/www": "${workspaceRoot}" } }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9003 } ] }
-
ローカルから以下のコマンドでサーバーに逆ポートフォワーディングを設定する。
ssh {サーバーのユーザー名@手順1のIPアドレス} -R 9003:localhost:9003
-
後はデバッグ対象のソースにブレークポイントを設定したら、ブラウザでURLに
XDEBUG_SESSION_START=XXX
パラメータを付加してアクセスすれば、以下のようにブレークポイントにヒットするようになる(デバッグをやめたい場合はXDEBUG_SESSION_STOP
パラメータを付加)。例) WordPressサイトのindex.phpにブレークポイントを設定
https://example.com?XDEBUG_SESSION_START=1234
ちなみにローカルのVSCodeのデバッガを起動した状態でsshでリモートサーバーに接続後に、リモートサーバーシェル上で以下のコマンドを実行すると、サーバー側からローカルのVSCodeデバッガに対してXdebugポートの疎通確認ができます。
telnet localhost 9003
参考ウェブサイトなど
- Xdebug
Step Debugging
以上です。
コメント
はじめまして。
ほとほと困ってしまって、こちらにコメントさせていただこうと、ドキドキしながら入力させていただいておりますm(__)m
当方EC-CUBEを使用しておりまして、
システムのアップデートを実行する際に、
「アップデートを実行する前に、以下の設定をご確認ください。
・xdebugが有効になっている→xdebugを無効にする
・memory_limitが128M→memory_limitを512Mに設定
・max_execution_timeが30→max_execution_timeを180に設定」
という記載がありましたが、xdebugを無効にする方法がわかりませんでした。
さくらインターネットを使用しております。
もしご存知でしたら、教えてくださるととてもありがたいです。
何とぞよろしくお願いいたします。
[レンタルサーバ] さくらインターネット
[OS] Windows10
[PHP] PHP 7.3.29
[データベース] MySQL 5.7
[WEBサーバ] Apache/2.4.48
[ブラウザ] Firefox 78.14.0esr
フォーラムも検索してあちこち読みましたが、無効にする方法は見つけられませんでした。。
webで「さくらインターネット xdebugを無効にする」で検索しても、見つけられませんでした。
コメントありがとうございます。
さくらのレンタルサーバーでは本記事の手順6に記載してるようにphp.iniの設定によって明示的にxdebugの使用を指示しない限りはデフォルトで有効化されることは無いのではないかと思います。
xdebugが有効かどうかは、本記事の手順7から確認できますので、こちらで確認してみてください。
もし有効になっているようであれば、php.iniの[xdebug]セクション部分をコメントアウトすれば無効化できると思います。
php.iniによるxdebugの無効化については、以下のWEB記事が参考になるかもしれません。
https://stackoverflow.com/questions/8754826/how-to-disable-xdebug
もしどうしても自力で解決できない場合は、さくらのレンタルサーバーのサポートに問い合わせてみてください。
私も別件でサポートを何度か利用していますが、色々丁寧に答えて頂けました。