# Configuration PHP OVH — uploads Appels d'offres

## Contexte

Les dépôts de documents AO imposent des limites métier plus élevées que la configuration PHP par défaut (~100 Mo) :

| Document | Format | Taille max (métier) | Validation Laravel |
|----------|--------|---------------------|-------------------|
| DCE | ZIP | **500 Mo** | `max:512000` (Ko) |
| Estimatif MOE | PDF | **50 Mo** | `max:51200` (Ko) |

Le fichier `.user.ini` à la **racine du projet** (à côté de `public/`) configure PHP sur l'hébergement mutualisé OVH.

## Valeurs `.user.ini`

```ini
upload_max_filesize = 512M
post_max_size = 520M
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
```

- `post_max_size` doit être **légèrement supérieur** à `upload_max_filesize` (marge pour les champs du formulaire multipart).
- `max_execution_time` / `max_input_time` : 300 s pour les gros ZIP sur connexions lentes.

## Vérification en production

```bash
php -i | grep upload_max_filesize
php -i | grep post_max_size
```

Attendu : `512M` et `520M`.

Après modification de `.user.ini`, attendre quelques minutes (cache OVH) ou redémarrer PHP-FPM si accès disponible.

## Déploiement

1. Commiter `.user.ini` (ou le déployer manuellement sur le serveur si politique différente).
2. `git pull` sur OVH.
3. Vérifier les valeurs effectives avec `php -i`.
4. Tester un DCE ~50 Mo puis refus d'un fichier > 500 Mo.

## Côté application

- Service : `App\Services\AoDocumentService` (`uploadValidationRules`, `max_size_kb` / `max_size_mb` dans `config()`).
- UI : `AoDocumentCard.vue` — barre de progression Inertia, message « Upload en cours… », validation client avant envoi.
