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 にアクセスするとブレークポイントに止まる。
