PHP(Fuelフレームワーク)を触ることがたまにあるのでリモートデバッグの方法をメモする。書いてみたけどPHP自体よくわかってない
vagrant のIP 192.168.33.10
ローカルのIP 192.168.33.1
root@vagrant-ubuntu-trusty-64:~# php -v PHP 5.5.9-1ubuntu4.20 (cli) (built: Oct 3 2016 13:00:37) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
ディレクトリ構成
blogの下にfuelのコード一式が入っている
vagrantは config.vm.synced_folder "./html/blog", "/data", owner: "www-data", group: "www-data"
をしてるところ以外は特記するところはない。
ゲスト側の設定
php周りのインストール
add-apt-repository ppa:ondrej/php5-5.6 apt-get update apt-get install -y php5 php5-fpm nginx php5-cli php5-xdebug
/etc/nginx/conf.d/php.conf の設定
server { # バーチャルサーバが使用するアドレス、ポートを指定 listen 80 ; # サーバの公開ディレクトリを指定 # /data をローカルと同期してる root /data/public; # インデックスページを指定 index index.php index.html index.htm; # URIごとにどのファイルを配信するか設定 location / { # 指定したパスにファイルが存在するかどうか if (-f $request_filename) { # キャッシュの有効期限を設定 expires 30d; break; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php?q=$1 last; } } location ~ [^/]\.php(/|$) { # PATH_INFO 部の分割に使用する正規表現を指定 # 一つ目 ( .+\.php ) は $fastcgi_script_name の値になり、二つ目 ( /.+ ) は $fastcgi_path_info の値になる fastcgi_split_path_info ^(.+\.php)(/.+)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # FastCGI サーバへリクエストをプロキシする #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.sock; # スラッシュで終わる URI の後に追加されるファイル名を設定 # $fastcgi_script_name の値になる fastcgi_index index.php; # 設定ファイルを読み込む include fastcgi_params; # 環境設定を与える fastcgi_param PHP_IDE_CONFIG serverName=192.168.33.10; # FastCGI サーバに渡されるべきパラメータを設定 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } }
/etc/php5/fpm/php.ini に追加
[xdebug] zend_extension="/usr/lib/php5/20121212/xdebug.so" xdebug.remote_enable=1 xdebug.remote_host="192.168.33.1" xdebug.remote_handler=dbgp xdebug.remote_port=9001 xdebug.remote_autostart=1 xdebug.idekey="phpdebug" ; annot accept external Xdebug connection: Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])' 対策 xdebug.extended_info=1
Intellijの設定
ディレクトリ構成のところで設定しているIP, /data
の設定以外に、Language & Framework > PHP > Debugのportを9001にする
メニューの Run > Break at first line in PHP scriptにチェックを入れる(デバッグをOFFにしたいときはこれを外す)
メニューの Run > Start Listening For PHP debug Connection を選択する
ブラウザなどで http://192.168.33.10/hello/a
にアクセスするとブレークポイントに止まる。