; Wakdo - configuration PHP runtime (surcharge le php.ini par defaut)
; Charge en dernier via le prefixe zz- pour avoir le dernier mot.

[PHP]
; --- Erreurs ---
; En dev : on affiche les erreurs a l'ecran. En prod : surcharge via override
; docker-compose.prod.yml qui remplace ce fichier (display_errors=0, log_errors=1).
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /proc/self/fd/2

; --- Memoire et temps ---
memory_limit = 256M
max_execution_time = 30
max_input_time = 60

; --- Upload images produits (voir .env UPLOAD_MAX_SIZE_MB=5) ---
; post_max_size >= upload_max_filesize + overhead des autres champs du form.
file_uploads = On
upload_max_filesize = 5M
post_max_size = 8M
max_file_uploads = 5

; --- Timezone ---
; Cr technique : eviter les warnings et les decalages date silencieux.
date.timezone = Europe/Paris

; --- Sessions ---
; Le nom du cookie et la lifetime sont surcharges par l'appli au runtime via
; session_set_cookie_params() a partir des variables SESSION_* du .env.
; Ce qui est fixe ici = les defaults securises.
session.use_strict_mode = 1
session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_httponly = 1
session.cookie_samesite = "Strict"
session.cookie_secure = 1
; session.save_path est laisse par defaut (/tmp dans le conteneur).
; Persistance inter-container non necessaire : chaque session est liee a une
; instance unique du service wakdo-app (pas de scale horizontal pour ce projet).

; session.gc_maxlifetime : filet de securite cote serveur (l'idle reel est
; pilote par l'appli via SESSION_LIFETIME_IDLE). 4h.
session.gc_maxlifetime = 14400
; IDs de session longs et a forte entropie (anti-prediction/fixation).
session.sid_length = 48
session.sid_bits_per_character = 6
; Pas de cache navigateur sur les pages avec session (anti-fuite via cache).
session.cache_limiter = nocache

; --- Durcissement general (security-by-design, cf. PROJECT_CONTEXT 19) ---
; Expose_php = Off : ne pas leak la version PHP dans l'entete HTTP.
expose_php = Off
; Anti RFI/SSRF : interdire l'ouverture d'URL distantes et leur inclusion.
allow_url_fopen = Off
allow_url_include = Off
; FPM : ne pas deviner le script a partir du PATH_INFO (anti exploitation
; d'upload mal route vers l'interpreteur). Le routage passe par le front controller.
cgi.fix_pathinfo = 0
; Interdire le chargement dynamique d'extensions au runtime.
enable_dl = Off
; Ne pas inclure les arguments dans les stack traces (anti-fuite de secrets).
zend.exception_ignore_args = On
; Desactiver les fonctions d'execution systeme : l'appli n'en a aucun usage
; legitime (anti-RCE en cas d'injection). Les scripts d'ops vivent cote cron/host.
disable_functions = exec,passthru,shell_exec,system,proc_open,popen

; --- OPcache (perf + stabilite) ---
[opcache]
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1
; En dev : revalidate toutes les 2s pour prendre en compte les modifs du bind-mount.
; En prod : validate_timestamps=0 via override (invalidation manuelle au deploy).
opcache.revalidate_freq = 2
opcache.fast_shutdown = 1

; --- PDO / MySQL ---
[PDO]
; Pas de persistent connections pour un projet a faible volume : plus simple
; a debugger et moins de risques de fuite de sessions BDD.

[MySQLi]
mysqli.default_host = wakdo-db
mysqli.default_port = 3306
