使用 Laradock 和 PhpStorm 設定 xdebug

前言

  • 環境: mac
  • 先安裝好 PhpStorm
  • 下載 Laradock 專案

安裝 xdebug

設定 laradock/.env

1
2
WORKSPACE_INSTALL_XDEBUG=true
PHP_FPM_INSTALL_XDEBUG=true

設定 xdebug 環境參數

設定 laradock/workspace/xdebug.ini & laradock/php-fpm/xdebug.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
xdebug.remote_host=docker.for.mac.localhost
xdebug.remote_connect_back=0
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM

xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.cli_color=0
xdebug.profiler_enable=0
xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1
xdebug.var_display_max_depth=-1

rebuild image

1
docker-compose build --no-cache php-fpm workspace

檢查 xdebug 是否正確安裝

使用 phpinfo() 看看 xdebug 是否開啟了,KEY 是否正確。

設定 PhpStorm

Preferences -> Languages & Frameworks -> PHP -> Debug

設定 Debug

設定 DBGp Proxy

設定 Servers

新增一個 server 設定,server name 需和 laradock 中 .env 的 PHP_IDE_CONFIG 設定一致,預設為 laradock

設定 remote debgger

點選視窗上方的 ADD CONFIGURATIONS 來新增一個 debugger

選擇 Templates -> PHP Remote debug,然後照下圖設定

點選 Validate debugger configuration on the Web Server 會出現下圖,然後照著設定
注意: 如果是 laravel 專案, Path to create validation script 路徑結尾要設到 public

設定完後按 VALIDATE,如果沒有什麼錯誤訊息,應該就是可以用了。

幾個遇過的坑點

基本上上面的設定都是測試可用的作法,下面算是曾經遇過的 issue,有遇到再看就好了。

port 的設定

php-fpm 的 port 為 9000,xdebug port 就不能設定為 9000 , 所以改設 9001,
參考:DEBUGGING PHP (WEB AND CLI) WITH XDEBUG USING DOCKER AND PHPSTORM

remote_connect_back 的設定

這個設定要改成 0,就是要關掉啦。

官網有說明這個參數的用途,基本上就是多人開發時使用:

There is also a xdebug.remote_connect_back setting that can be used if your development server is shared with multiple developers.

If enabled, the xdebug.remote_host setting is ignored and Xdebug will try to connect to the client that made the HTTP request. It checks the $_SERVER[‘HTTP_X_FORWARDED_FOR’] and $_SERVER[‘REMOTE_ADDR’] variables to find out which IP address to use.

更多訊息可以看官網說明

更多介紹可以看PHP调试工具-Xdebug

composer 超慢

image build 完重啟後,composer install 一直無反應 ,連 composer -v 也是如此,以為是 container 有問題,所以反覆刪掉 container 和 image,反覆重 build 重啟…。

直到放了一段很長時間後,composer 才開始跑,並且在跑之前有這樣的訊息:

1
1571381068.831664: There was a problem sending 289 bytes on socket 4: Broken pipe

經過超多次測試,確定是開了 debug 造成 composer 超慢,也嘗試了超多種設定,目前還沒有找到一個最佳解。
目前暫時的做法是:

  1. docker 的 xdebug 設定開啟
  2. 然後 container 啟動後以 root 權限進入 workspace, 註解掉 /etc/php/7.2/cli/con.d/20-xdebug.ini 裡面的設定,
    這樣可以暫時讓兩個服務都能使用…

UPDATE: 20200708 再次測試,已經沒有這個問題。

Reference

Laradock 使用 PhpStorm Debug 代码

使用 Xdebug 在 PHPStorm 中调试 PHP 程序(框架/原生均适用)