さくらのレンタルサーバのPHPをVSCodeでリモートデバッグする方法

この記事は公開から3年以上経過しています。

さくらのレンタルサーバ(スタンダードプラン)で稼働するPHPを、ssh逆ポートフォワーディングさせてローカルのVSCodeからリモートデバッグする方法。WordPressプラグイン開発時にも利用できます。

PHP.iniの設定やファイルシステムの操作を誤るとWEBサイトが機能しなくなったりデータが喪失する恐れがあります。
必ずスナップショットをとるなど、復旧ができるようにバックアップしてから作業してください(At Your Own Risk)。

VSCodeでPHPをデバッグするにはPHP Debug拡張のようなデバッガのインストールが必要です。また、本説明ではドキュメントルートをwwwとしているため、ドキュメントルートを変更している場合はご自身のサーバー環境設定に適宜読み替えてください。

対応手順

  1. レンタルサーバコントロールパネルからサーバ情報で以下の画面を開き、サーバーのIPアドレスをメモする(本例はIPv4接続)。

    file

  2. ローカルコンピューターでターミナルを開き以下のコマンドを実行する。

    ssh サーバーのユーザー名@手順1のIPアドレス
  3. パスワード入力を求められたらサーバーのパスワードを入力する。

    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!
    
    %
  4. 以下のコマンドでソースビルド用ディレクトリに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
  5. 以下のコマンドでXdebugのソースビルドとインストールを行う。

    phpize
    ./configure
    make
    mkdir -p ~/local/lib/php/extensions/
    cp modules/xdebug.so ~/local/lib/php/extensions/
  6. レンタルサーバコントロールパネルから、スクリプト設定PHP.ini設定で以下の画面を開き、php.iniの既存項目に続けて以下の情報を入力したら保存するを押下して設定を登録する。

    file

    [Xdebug]
    zend_extension=/home/{サーバーユーザー名}/local/lib/php/extensions/xdebug.so
    xdebug.mode=debug
  7. 以下のコマンドでXdebugの拡張モジュールが読み込まれているか確認する。

    php -c ~/www/php.ini -m

    Xdebugが正常にインストール&設定できていれば、以下のように表示される。

    [Zend Modules]
    Xdebug
  8. VSCodeのPHPデバッグ用のlaunch.jsonconfigurations/port9003configurations/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
            }
        ]
    }
  9. ローカルから以下のコマンドでサーバーに逆ポートフォワーディングを設定する。

    ssh {サーバーのユーザー名@手順1のIPアドレス} -R 9003:localhost:9003
  10. 後はデバッグ対象のソースにブレークポイントを設定したら、ブラウザでURLにXDEBUG_SESSION_START=XXXパラメータを付加してアクセスすれば、以下のようにブレークポイントにヒットするようになる(デバッグをやめたい場合はXDEBUG_SESSION_STOPパラメータを付加)。

    例) WordPressサイトのindex.phpにブレークポイントを設定

    https://example.com?XDEBUG_SESSION_START=1234

    file

ちなみにローカルのVSCodeのデバッガを起動した状態でsshでリモートサーバーに接続後に、リモートサーバーシェル上で以下のコマンドを実行すると、サーバー側からローカルのVSCodeデバッガに対してXdebugポートの疎通確認ができます。

telnet localhost 9003

file

参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. misaaane より:

    はじめまして。
    ほとほと困ってしまって、こちらにコメントさせていただこうと、ドキドキしながら入力させていただいております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を無効にする」で検索しても、見つけられませんでした。

    • Y.Sakamoto より:

      コメントありがとうございます。

      さくらのレンタルサーバーでは本記事の手順6に記載してるようにphp.iniの設定によって明示的にxdebugの使用を指示しない限りはデフォルトで有効化されることは無いのではないかと思います。
      xdebugが有効かどうかは、本記事の手順7から確認できますので、こちらで確認してみてください。
      もし有効になっているようであれば、php.iniの[xdebug]セクション部分をコメントアウトすれば無効化できると思います。

      php.iniによるxdebugの無効化については、以下のWEB記事が参考になるかもしれません。
      https://stackoverflow.com/questions/8754826/how-to-disable-xdebug

      もしどうしても自力で解決できない場合は、さくらのレンタルサーバーのサポートに問い合わせてみてください。
      私も別件でサポートを何度か利用していますが、色々丁寧に答えて頂けました。