Home > Backend Development > PHP Tutorial > Flexible Docker Images with PHP INI Environment Variables

Flexible Docker Images with PHP INI Environment Variables

Karen Carpenter
Release: 2025-03-06 02:15:09
Original
947 people have browsed it

This tutorial demonstrates how to use environment variables to configure Xdebug within a Dockerized PHP 8.4 application, enhancing flexibility and avoiding hardcoded INI settings. The previous tutorial hardcoded Xdebug settings, limiting developer customization. This approach allows each developer to manage their Xdebug configuration without altering the Docker image.

PHP 8.3 and later versions support fallback values in INI files using environment variables, simplifying configuration. Previously, the xdebug.ini file looked like this:

<code>; build/php/conf.d/xdebug.ini file
[xdebug]
xdebug.mode = debug

xdebug.client_host = host.docker.internal

; Or use the host machine IP address:
; xdebug.client_host = 192.168.86.203

xdebug.start_with_request = yes</code>
Copy after login

This method requires manual INI file updates for each developer, which is inefficient. A superior approach utilizes environment variables:

<code>services:
  app:
    # ... other configurations ...
    environment:
      XDEBUG_CONFIG: "client_host=0.0.0.0 start_with_request=yes"
      XDEBUG_MODE: "debug,develop"</code>
Copy after login

Storing these environment variables in an unversioned .docker.env file allows for per-developer customization. Alternatively, you can leverage environment variables directly within the xdebug.ini file:

<code>; build/php/conf.d/xdebug.ini file
[xdebug]
xdebug.mode = ${PHP_XDEBUG_MODE:-debug,develop}

xdebug.client_host = ${PHP_XDEBUG_CLIENT_HOST:-host.docker.internal}

xdebug.start_with_request = ${PHP_XDEBUG_START_WITH_REQUEST:-trigger}</code>
Copy after login

The PHP_ prefix avoids naming conflicts and clearly identifies INI environment variables. XDEBUG_MODE and XDEBUG_CONFIG are reserved for direct Xdebug configuration.

To verify the settings, add phpinfo(); exit; to public/index.php or use the following commands within the Docker container:

$ docker compose up --build -d
$ docker compose exec app bash
$ php -i | grep xdebug\.start_with_request
Copy after login

For local customization, add an env_file to your docker-compose.yaml:

services:
  app:
    # ... other configurations ...
    env_file:
      - .docker.env
Copy after login

Create .docker.env (add to .gitignore) and .docker.env.example files with default settings:

<code>PHP_XDEBUG_MODE=debug

PHP_XDEBUG_CLIENT_HOST=host.docker.internal
# Or use your computer's local network IP
# PHP_XDEBUG_CLIENT_HOST=192.168.86.250

PHP_XDEBUG_START_WITH_REQUEST=trigger</code>
Copy after login

Rebuild the container to see the changes reflected. The updated settings will be visible in phpinfo():

Flexible Docker Images with PHP INI Environment Variables

This method allows for flexible Xdebug configuration without modifying the image build process. While direct Xdebug environment variables offer simplicity, the INI method provides more comprehensive control, as not all settings are configurable via XDEBUG_CONFIG. Choose the approach best suited to your needs.

The above is the detailed content of Flexible Docker Images with PHP INI Environment Variables. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template