xdebug+Eclipse+PDTで幸せ開発環境
久しぶりにPHPによる開発を目の当たりし、ステップ実行でデバッグできないのは難儀だなぁと、
xdebugによるデバッグ環境構築を試してみました。
自分が開発していたときを思い出すと、「perlではステップ実行できるのにphpだと出来ないな」
などとぼやきながらviでトライ&エラーでデバックコードを埋め込んでいた記憶があります。
とりあえず、開発環境を構築しよう。
XAMPやMAMPなど、クライアントPCで動かすPHP環境には導入と同時にxdebugがインストール
されているようですが、ここではあえて下図のようなリモートサーバでの開発を念頭に話を
進めていきます。
CentOSを開発サーバとしてxdebugを導入する
LAN上に開発サーバをおくことを前提として、selinux・iptablesを停止します。
# 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※試験的な環境のため、その他必要なモジュールがあれば一緒にインストールしてください。
xdebugのpeclモジュールをインストールします。
# 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=Onxdebugの設定パラメタはphpinfo();をみていただければわかりますが色々とありますが、
ここでは最低限の情報のみ記述いたします。
xdebug.remote_connect_back=Onデフォルト値ではこの値はOffとなっており、xdebugによるデバッグ情報のやり取りは
”xdebug.remote_host”で設定されたホストに限定されます(default:localhost)。
単一ホストを指定する場合、この値に対象のIPアドレス指定すれば良いのですが、
接続元IPが明示的に指定できない場合などでは、xdebug.remote_connect_backを
有効にすることで、リクエスト元とxdebugを疎通させます。
xdebugとIDE間の情報伝達の流れ
どのように、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側の設定については改めて記載したいと思います。