<!--
  canonical-url: https://www.avonture.be/fr/blog/docker-phpdocumentor
  published:     2023-12-27
  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.
-->

# Générer la documentation d'un projet PHP

> Générez sans effort une documentation de qualité pour votre code PHP. Ce guide montre comment utiliser l'image Docker phpDocumentor pour créer la documentation en une seule commande.

---
![Générer la documentation d'un projet PHP](/img/v2/php_tips.webp)

**TL;DR**

Cet article montre comment générer un site de documentation navigable pour un projet PHP (avec le cœur de WordPress comme exemple) sans rien installer localement : un fichier de configuration `phpdoc.xml` et une seule commande `docker run ... phpdoc/phpdoc:3` analysent le dossier `src` et produisent un site HTML complet dans `.phpdoc/index.html`.

Vous avez un projet PHP et vous souhaitez — hop, hop, en deux temps trois mouvements — générer un site de documentation sans vous prendre la tête.

Facile ! [phpDocumentor](https://docs.phpdoc.org/) le fait pour vous et, comme une image Docker existe, presque tout tient en une seule commande.

## Une commande, un site de documentation complet {#one-command-a-full-documentation-website}

Depuis la racine de votre projet PHP, lancez :

```bash
$ docker run -it --rm -u $(id -u):$(id -g) -v .:/data phpdoc/phpdoc:3
```

Et voici ce qui atterrit dans le dossier `.phpdoc` — celui-ci a été généré à partir du code de WordPress :

> Screenshot — http\://localhost/
>
> ![Documentation PHP de WordPress 6.4.2](./images/wordpress_phpdoc.webp)

Un site navigable avec les namespaces, les classes, leurs méthodes et les docblocks que vous avez écrits. Rien n'a été installé sur votre machine : phpDocumentor, PHP et toutes les dépendances vivent dans l'image, qui disparaît avec le container grâce à `--rm`.

## Le fichier de configuration {#the-configuration-file}

[phpDocumentor](https://docs.phpdoc.org/) a besoin d'un fichier de configuration pour savoir quoi analyser et où écrire. Créez un nouveau fichier appelé `phpdoc.xml` avec ce contenu, dans le répertoire de votre projet :

**phpdoc.xml**

```xml
<?xml version="1.0" encoding="UTF-8"?>
<phpdocumentor
    configVersion="3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://www.phpdoc.org"
    xsi:noNamespaceSchemaLocation="https://docs.phpdoc.org/latest/phpdoc.xsd"
>
    <paths>
        <output>./.phpdoc</output>
        <cache>/tmp/phpdoc</cache>
    </paths>
    <version number="3.0.0">
        <api>
            <source dsn=".">
                <path>src/</path>
            </source>
        </api>
    </version>
</phpdocumentor>
```

C'est ce qui indique à la commande ci-dessus d'analyser le dossier `src` et de créer le répertoire `.phpdoc` où la documentation sera enregistrée.

> **WSL2 - Windows:**
>
> Si vous travaillez sous WSL2, pour accéder à la documentation, lancez simplement `powershell.exe .phpdoc/index.html` pour ouvrir la documentation. Lisez [Starting the default associated Windows program on WSL](/blog/wsl-powershell) ou [Open your Linux folder in Windows Explorer](/blog/wsl-windows-explorer) pour plus d'informations.

**Pas de projet PHP sous la main ? Récupérez-en un gros pour jouer.**

Pour l'illustration ci-dessus, j'ai utilisé le code de WordPress. Démarrez un shell Linux et lancez `mkdir -p /tmp/wordpress && cd $_`.

Lancez ensuite `curl -L --silent -o wordpress-develop-6.4.2.zip https://github.com/WordPress/wordpress-develop/archive/refs/tags/6.4.2.zip` pour télécharger WordPress v6.4.2. Vous obtiendrez un fichier `wordpress-develop-6.4.2.zip` sur votre disque.

Décompressez-le avec `unzip wordpress-develop-6.4.2.zip && rm wordpress-develop-6.4.2.zip` ; vous aurez maintenant un dossier `wordpress-develop-6.4.2`, alors entrez-y avec `cd wordpress-develop-6.4.2`.

## Conclusion {#conclusion}

Un `docker run`, un fichier XML, et n'importe quel projet PHP — le vôtre, ou celui dont vous venez d'hériter — devient un site de documentation navigable. Le plus intéressant n'est pas la génération elle-même : c'est que la qualité de la sortie reflète directement les docblocks présents dans le code. Lancez-la une fois sur un projet et vous voyez immédiatement où l'effort de documentation est réellement passé.

Bash n'a pas d'équivalent à phpDocumentor, c'est pourquoi j'ai écrit le mien ; voyez [Linux - Generate documentation from Bash scripts](/blog/linux-generate-documentation-from-bash-scripts). Et pour de la documentation qui n'est pas extraite du code du tout, il y a [Quarto - How I Built a Self-Documenting Ecosystem for 50+ Projects](/blog/quarto-industrialisation).
