概要
dockerでphp5.4の開発環境を作ったメモ。古い環境での開発は面倒ですね。
vscodeにphp debugをいれてデバッグ実行。
デバッグポイントで止まらなくてハマったが、以下の記事で紹介されていた方法で解決。
VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)
※2018/09/06 追記
この情報は古くなっている場合があります。 最新の環境だとXdebug動きませんでした。
新しい環境で動かしたみた記事はこちら → xdebug+nginx+vscode
動作環境
- windows10
- vagrant2.0.2
- virtualbox5.1.26
- ubuntu-16.04
- Docker version 17.09.0-ce, build 19e2cf6
- docker-compose version 1.18.0, build 8dd22a9
構造
project
- .vscode
- launch.json
+ server # Docker用ファイル
+ src # phpソースファイル
+ logs # ログ・ファイル
- docker-compose.yml
設定
ホスト:Visual Studio Code の PHP DEBUGの設定
"stopOnEntry": true,
の設定がないとステップ実行できなかった。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"stopOnEntry": true,
"log": true,
"pathMappings": {
"/var/www/html": "${workspaceRoot}/src"
}
}
]
}
ゲスト: apacheサーバの設定
FROM php:5.4-apache
# Apacheモジュールインストール
RUN a2enmod rewrite
# PHPモジュールインストール
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install mysql
# Install xdebug for php debugging
RUN apt-get update
RUN apt-get install -y php-pear
RUN pecl install xdebug-2.4.1
RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "debug.default_enable = 1" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_autostart=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_connect_back = on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_log = /var/log/apache2/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug_settings.ini
# php設定
RUN echo '\
date.timezone = "Asia/Tokyo"\n\
memory_limit = -1\n\
' >> /usr/local/etc/php/php.ini
# PHPのログを出力
# error_log = /dev/stderr\n\
RUN echo '\
log_errors = On\n\
error_log = /var/log/apache2/php.log\n\
error_reporting = E_ALL\n\
display_errors = On\n\
' >> /usr/local/etc/php/conf.d/docker.ini
# apacheのログを出力
RUN echo '\
CustomLog /var/log/apache2/access.log combined \n\
ErrorLog /var/log/apache2/error.log\n\
LogLevel warn\n\
' >> /etc/apache2/conf-enabled/log.conf
version: "3"
services:
# サーバー
php:
build: ./server/apache
volumes:
- ./src:/var/www/html
- ./logs:/var/log/apache2
ports:
- "80:80"
vscodeを起動して、デバッガを起動しておく。
apacheを立ち上げて、表示されたページにブラウザからアクセスするとステップ実行可能。
"stopOnEntry": true,
により、デバッグポイントがなくても、ファイルの最初でストップする。
おまけ
PHP7 + nginx でも同様に設定できた。
FROM php:7-fpm
RUN apt-get update
RUN docker-php-ext-install pdo_mysql
RUN pecl install xdebug
RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "debug.default_enable = 1" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_autostart=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
&& echo "xdebug.remote_connect_back = on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini
# PHPのログを出力
# error_log = /dev/stderr\n\
RUN echo '\
log_errors = On\n\
error_log =/dev/stderr\n\
error_reporting = E_ALL\n\
display_errors = On\n\
' >> /usr/local/etc/php/conf.d/docker.ini
参考
Docker for Mac の PHPStorm で Xdebug を行う
Dockerで古いPHP(5.x)のXdebugを組み込んだデバッグ環境を構築する
PHP開発者がいまさら聞けない、Xdebugの基礎の基礎
PHP5.4に対応するXdebugは2.4.1
vscode-php-debug
UbuntuへのPECL xdebugインストール
vagrant:ubuntu + docker + nginx + xdebug
【Xdebug】Windows 7のVagrant でリモートデバッグできない問題
VS CodeのDebug Extension設定について
XDEBUG EXTENSION FOR PHP | DOCUMENTATION
VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)
VSCodeでPythonをデバッグする
xdebug-php.md
nginx+php7.0+xdebugインストールではまったこと
UbuntuのPHP開発環境
Vagrant上のPHPを Xdebug + NetBeans(おまけでVisual Studio Codeでも)でリモートデバッグする