xdebug+Eclipse+PDTで幸せ開発環境

久しぶりにPHPによる開発を目の当たりし、ステップ実行でデバッグできないのは難儀だなぁと、
xdebugによるデバッグ環境構築を試してみました。

自分が開発していたときを思い出すと、「perlではステップ実行できるのにphpだと出来ないな」
などとぼやきながらviでトライ&エラーでデバックコードを埋め込んでいた記憶があります。

とりあえず、開発環境を構築しよう。

XAMPやMAMPなど、クライアントPCで動かすPHP環境には導入と同時にxdebugがインストール
されているようですが、ここではあえて下図のようなリモートサーバでの開発を念頭に話を
進めていきます。

CentOSを開発サーバとしてxdebugを導入する

LAN上に開発サーバをおくことを前提として、selinuxiptablesを停止します。

# setenfoce 0
# chkconfig iptables off
# chkconfig ip6tables off
# service iptables stop
# service ip6tables stop

手軽にyumでサーバ構築を行うため、remiリポジトリを登録します
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

続いて、Apache+PHPの環境を構築します。
# yum install -y httpd.x86_64 httpd-devel.x86_64
# yum install -y \
            php.x86_64 \
            php-mbstring.x86_64 \
            php-pear.noarch \
            php-devel.x87_64
※試験的な環境のため、その他必要なモジュールがあれば一緒にインストールしてください。
xdebugpeclモジュールをインストールします。
# yum install -y php-pecl-xdebug.x86_64
xdebugを設定する
インストール直後のままではリモートデバッグが行えないため、設定ファイルを修正します。
# vi /etc/php.d/xdebug.ini
; Enable xdebug extension module
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable = On
xdebug.remote_connect_back=On
xdebugの設定パラメタはphpinfo();をみていただければわかりますが色々とありますが、
ここでは最低限の情報のみ記述いたします。
xdebug.remote_connect_back=On
デフォルト値ではこの値はOffとなっており、xdebugによるデバッグ情報のやり取りは
xdebug.remote_host”で設定されたホストに限定されます(default:localhost)。

単一ホストを指定する場合、この値に対象のIPアドレス指定すれば良いのですが、
接続元IPが明示的に指定できない場合などでは、xdebug.remote_connect_backを
有効にすることで、リクエスト元とxdebugを疎通させます。

xdebugIDE間の情報伝達の流れ

どのように、xdebugが動作するかについては、オフィシャルドキュメント
「Communication Set-up」をご覧いただきたいと思いますが、
簡単に説明すると、

おまけ。Sambaを設定する

yumからsambaサーバをインストールします。

yum install -y samba.x86_64

ここでは、とりあえず設定しているので以下のような感じで設定ファイルを準備しています。
# vi /etc/samba/smb.conf
[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
		
		log file = /var/log/samba/log.%m
		max log size = 50
		
		security = user
        passdb backend = tdbsam
        map to guest = Bad User

[developments]
        comment = Developmentsp
        path = /var/www/html
        public = yes
        guest ok = yes
        writable = yes
        printable = no

samba経由でファイルの書き込みはnobodyで行われるため、共有対象パスの
パーミッションを変更します。
# chown nobody:nobody /var/www/html

とりあえず、以上です。 Eclipse側の設定については改めて記載したいと思います。