<!--
  canonical-url: https://www.avonture.be/fr/blog/docker-php-ini
  published:     2023-12-22
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# Mettre à jour php.ini quand on utilise une image Docker

> Un guide pas à pas pour mettre à jour votre fichier php.ini dans un container Docker via un volume monté dans compose.yaml. Réglez les problèmes courants comme la taille maximale d'upload.

---
![Mettre à jour php.ini quand on utilise une image Docker](/img/v2/docker_tips.webp)

**TL;DR**

Cet article montre comment surcharger les réglages de `php.ini` (p. ex. la taille maximale d'upload) sur un site PHP dockerisé : créez un fichier `php.ini` local, montez-le par-dessus le fichier de config du container via une entrée `volumes` dans `compose.yaml`, puis lancez `docker compose down && docker compose up --detach` pour appliquer le changement.

Cet article répond à la situation suivante : *j'utilise une image Docker pour faire tourner mon site et je dois modifier le fichier php.ini ; comment faire ?*

Un exemple concret : vous avez suivi mon article [Créez votre site web Joomla avec Docker](/blog/docker-joomla) et tout fonctionne bien. Le site tourne, et vous voulez uploader un gros fichier via l'interface d'administration de Joomla. Et là, vous obtenez l'erreur *The selected file cannot be transferred because it is larger than the maximum upload size allowed*.

![Vos réglages PHP avant modification](./images/before.webp)

Une des façons les plus simples de faire est de créer un fichier `.ini` sur votre disque et de [le partager avec votre container](/blog/docker-volume).

Vous avez très probablement un fichier `compose.yaml` ; ouvrez-le dans votre éditeur.

Pour l'illustration, vous trouverez ci-dessous une copie du fichier `compose.yaml` le plus simple que vous pouvez récupérer dans mon article [Créez votre site web Joomla avec Docker](/blog/docker-joomla). *Le vôtre peut évidemment être différent.* C'est juste pour l'exemple.

**compose.yaml**

```yaml
services:
  joomla:
    image: joomla
    restart: always
    ports:
      - 8080:80
    environment:
      - JOOMLA_DB_HOST=joomladb
      - JOOMLA_DB_PASSWORD=example

  joomladb:
    image: mysql:8.0.13
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=example
```

## Étape un - Mettre à jour votre fichier yaml {#step-one---update-your-yaml-file}

La solution consiste à ajouter la ligne `volumes` si elle n'est pas déjà présente dans votre fichier et, surtout, la ligne qui *surcharge* le fichier `php.ini` comme ci-dessous :

**compose.yaml**

```yaml
services:
  joomla:
    image: joomla
    restart: always
    ports:
      - 8080:80
    environment:
      - JOOMLA_DB_HOST=joomladb
      - JOOMLA_DB_PASSWORD=example
    # highlight-next-line
    volumes:
      # highlight-next-line
      - ./php.ini:/usr/local/etc/php/php.ini

  joomladb:
    image: mysql:8.0.13
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=example
```

## Étape deux - Créer votre propre fichier php.ini {#step-two---create-your-own-phpini-file}

La deuxième chose à faire est de créer un fichier appelé `php.ini` dans le même dossier que votre `compose.yaml`, où vous définirez vos variables ; par exemple :

**php.ini**

```ini
file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600
```

Votre dossier contient donc maintenant au moins deux fichiers :

```bash
$ pwd
/tmp/joomla

$ ls -alh
Permissions Size User       Group      Date Modified    Name
drwxr-xr-x     - christophe christophe 2023-11-04 09:32  .
drwxrwxrwt     - christophe christophe 2023-11-04 09:32 ..
.rw-r--r--   325 christophe christophe 2023-11-04 09:32 compose.yaml
-rw-r--r--     1 christophe christophe 2023-12-22 19:51 php.ini
```

## Étape trois - Redémarrer votre container {#step-three---restart-your-container}

Ceci fait, lancez simplement `docker compose down ; docker compose up --detach` dans votre terminal pour arrêter votre/vos container(s) actuel(s) et le/les redémarrer.

Au redémarrage, Docker prendra en compte vos derniers changements et mettra à jour le fichier `php.ini` présent dans Docker.

![Vos réglages PHP après modification](./images/after.webp)
