Lập trình PHP

Hướng dẫn cài đặt Xdebug và sử dụng XDebug để gỡ rối PHP với IDE phổ biến như Visual Studio Code, PHPStorm

Giới thiệu về Xdebug

Xdebug là một extension dành cho PHP, khi cài đặt nó nó sẽ cập nhật lại việc hiện thị lỗi, cập nhật một số lệnh có sẵn (như var_dump), đặc biệt nó cho phép kết nối đến các IDE (như Visual Studio Code, PHPStorm ...) để gỡ rối mã PHP, lúc này từ IDE có thể thực hiện việc đặt các breakpoint (điểm dừng mã để trích xuất, xem các thông tin ...) cũng như các thao tác Debug như : Step Into, Step Over, Restart ...

Cài đặt Xdebug

Cài đặt Xdebug trong PHP chạy trực tiếp trên Linux, macOS

Bạn dùng PEAR/PECL để cài đặt. Mặc định thì lệnh pecl có sẵn khi cài PHP trên macOS với brew (xem phần cài đặt PHP trên macOS). Trên Linux ví dụ CentOS nếu chưa có pecl thì gõ lệnh sau để cải đặt

yum install php-pear

Gõ lệnh pecl sau để cài đặt Xdebug

pecl install xdebug

Sau khi cài đặt cần thêm dòng sau vào php.ini để PHP nạp extension này:

zend_extension="/usr/local/php/modules/xdebug.so"

(Đường dẫn tới xdebug.so có thể khác trên máy bạn - xem kết quả lệnh cài xdebug để biết nó ở đâu)

Cuối cùng gõ lệnh sau để kiểm tra xem PHP có nạp được Xdebug chưa

php -m | grep "xdebug"

Nếu hiện thị dòng xdebug là thành công

Cài đặt Xdebug trong PHP trên Windows

Đối với PHP trên Windows bạn cần tải về một file thư viện xdebug.x.x..dll thích hợp, hãy chạy một script php từ trình duyệt có nội dung:

<?php
    phpinfo();

Khi chạy script đó, từ trình duyệt có kết quả dạng:

Hãy chọn tất cả nội dung xuất ra đó (Ctrl - A), rồi copy (Ctrl - C) rồi vào trang xdebug wizard, dán toàn bộ nội dung có được vào hộp nhập liệu của trang đó. Sau đó bấm vào nút bấm Analyse my phpinfo() output, sau khi nó phân tích thì sẽ có đường link để bạn tải xdebug thích hợp về máy. Ví dụ, file tải về là php_xdebug-2.7.2-7.2-vc15-x86_64.dll, hãy lưu vào thư mục chứa phần mở rộng của PHP, trên máy tôi là C:\wamp64\bin\php\php7.2.18\zend_ext

Sau đó thêm vào php.ini (ví dụ C:\wamp64\bin\php\php7.2.18\ini) nội dung:

zend_extension = C:\wamp64\bin\php\php7.2.18\zend_ext\php_xdebug-2.7.2-7.2-vc15-x86_64.dll

Sử dụng Xdebug trong Visual Studio Code và PHPStorm

Phần này hướng dẫn cấu hình sử dụng Xdebug trên 2 IDE nổi tiếng dành cho PHP, một cái miễn phí là Visual Studio Code và cái kia là PHPStorm.

Cấu hình Xdebug

Trước khi cấu hình nắm một số nguyên tắc làm việc của Xdebug khi kết nối với IDE như sau: IDE phải tạo ra một phiên làm việc và mở ra một cổng (mặc định 9000, với địa chỉ IP, mặc định localhost) để XDebug của PHP kết nối vào mỗi khi PHP chạy các script.

Bạn cập nhật vào php.ini nội dung sau:

xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.remote_port=9000

xdebug.profiler_enable=0
xdebug.var_display_max_depth = 5
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024
xdebug.profiler_enable=0

#xdebug.remote_log = /var/logs/xdebug.log - chỉnh đến đường dẫn lưu log

xdebug.remote_connect_back=0
xdebug.remote_host=localhost

Thực hiện Debug trên Visual Studio Code

Trong Visual Studio Code, cần cài đặt Extension có tên PHP Debug, phần mở rộng này cho phép tạo ra Client lắng nghe trên cổng do bạn ấn định để xDebug kết nối vào.

PHP Debug

Khi mở dự án PHP của bạn xong, chọn biểu tượng Debug (hình con bọ), sau đó chọn biểu tượng bánh xe, chọn Add Config PHP cấu hình như hình dưới:

Sau khi chọn xong, nó sẽ tạo ra file launch.json, bạn sửa đổi file này nội dung như sau:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "hostname": "localhost"

        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000,
        }
    ]
}

Lúc này, bạn có thể đặt breakpoint, hoặc gỡ rối nếu phát sinh ngoại lệ. Bạn bấm vào nút mũi tên xanh (play) để bắt đầu tạo client phiên làm việc, lắng nghe Xdebug kết nối tới ở cống 9000 của localhost, nó xuất hiện như hình dưới.

Giả sử đặt breakpoint vào file test.php, khi chạy file này từ trình duyệt hoặc CLI, lập tức XDebug hoạt động.

Bạn đã bắt đầu có thể thực hiện các thao tác debug (step over, step into ...), trong quá trình này bạn sẽ giám sát được giá trị các biến, call stack ...

Thực hiện Debug với PHPStorm

Nếu phát triển dự án PHP với PHPStorm thì cấu hình để nó kết nối với Xdebug như sau: Mở hộp thoại Preferences, Settings tìm đến mục Xdebug và nhập các thông tin như sau:

Khi cấu hình xong, muốn bắt đầu một phiên debug thì bấm vào biểu tượng điện thoại (Start Listening for PHP Debug ...), sau đó có thể đặt breakpoint, phát sinh ngoại lệ ... để Debug. Khi chạy code nếu phát sinh ngoại lệ, hoặc đến breakpoint chương trình sẽ tạp dừng và xuất hiện khu vực Debug trong PHPStorm

Sử dụng Xdebug trong PHP Container Docker

Trong phần này thực hiện trên PHP Container với cấu trúc và thư mục chia sẻ code ... đúng như hướng dẫn tại Cài đặt PHP FPM - tuy nhiên có thêm ánh xạ cổng XDebug 9001 (thêm tham số -p 9001:9001 khi chạy container này)(chọn 9001 vì cổng 9000 có thể PHP FPM đang chiếm), đồng thời cũng có Container Apache cài đặt giống như Cài đặt và cấu hình Apache Container

Theo như cấu trúc trên thì dự án PHP code lưu ở máy host tại thư mục /mycode/php tương ứng trong các container là đường dẫn /home/phpcode, bạn nhớ cấu trúc này vì cần trong thiết lập XDebug PHP

Cài đặt XDebug vào PHP Container

Container PHP đang chạy có đặt tên là c-php, khi nó đang chạy hãy vào terminal của container bằng lệnh:

docker exec -it c-php bash

Sau đó gõ lần lượt các lệnh sau để cài đặt XDebug

apt-get update
apt-get upgrade -y
apt-get install -y --force-yes curl git nano zlib1g-dev
apt-get install libzip-dev
docker-php-ext-install zip
docker-php-ext-enable zip
pecl install xdebug
docker-php-ext-enable xdebug

Sau khi cài đặt xong, gõ lệnh php -v, nếu hiện thị có dòng with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans thì đã cài đặt thành công extension này vào PHP

Cấu hình để XDebug cho phép Remote Debug

Bạn mở file /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini trong container c-php thêm vào các cấu hình sau:

xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_autostart=1
xdebug.remote_port=9001
xdebug.profiler_enable=0
xdebug.var_display_max_depth = 5
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024
xdebug.profiler_enable=0
xdebug.remote_log = /xdebug.log
xdebug.idekey = docker
xdebug.remote_host=192.168.1.5

Sau khi thêm vào khởi động lại container, mọi tình trạng hoạt động được ghi ra log tại /xdebug.log, địa chỉ 192.168.1.5 là IP máy host, hãy thay bằng IP máy host của bạn. Khởi động lại container khi đã cấu hình xong.

Trên macOS, Linux có thể gõ ifconfig | grep "inet " | grep -v 127.0.0.1 để xem địa chỉa IP của máy HOST. Trên Windows gõ ipconfig

Thiết lập Visual Studio Code để Debug với PHP Container

Chỉ việc sửa đổi file launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9001,
            "hostname": "192.168.1.5",
            "pathMappings": {
                "/home/phpcode": "/mycode/php"
            }

        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9001,
        }
    ]
}

Hãy chú ý mục pathMappings, hostname, port. Đến đây thì có thể Debug PHP Docker giống như PHP trực tiếp ở trên. Tương tự dành cho PHPStorm, chỉ việc thay cổng 900 thành 9001

Đăng ký theo dõi ủng hộ kênh