Il 413 arriva dal server web, non dal tuo codice. La richiesta è stata troncata prima di raggiungere PHP: per questo nel registro dell'applicazione non compare nulla, e per questo alzare da solo upload_max_filesize non cambia niente.

Nginx

# in http, server or location
client_max_body_size 64M;

sudo nginx -t && sudo systemctl reload nginx

Il valore predefinito è 1M. È il limite contro cui quasi tutti sbattono per primo.

PHP, ed entrambi i valori

; php.ini
upload_max_filesize = 64M
post_max_size = 68M       ; must exceed upload_max_filesize
memory_limit = 128M
max_execution_time = 300
post_max_size deve essere PIÙ GRANDE di upload_max_filesize, perché la richiesta trasporta il file più il resto del modulo. Rendili uguali e un file esattamente al limite fallisce senza nemmeno un messaggio utile.

Apache e LiteSpeed

# .htaccess
LimitRequestBody 67108864
php_value upload_max_filesize 64M
php_value post_max_size 68M

Poi verifica cosa viene davvero caricato

php -i | grep -E 'upload_max_filesize|post_max_size'   # the CLI, which may differ
# and from the web, in a temporary file:
# <?php echo ini_get('upload_max_filesize');
La riga di comando e il server web leggono file ini diversi. Una modifica che compare in php -i e non nel browser significa che hai corretto quello sbagliato: controlla anche la cartella dei pool di PHP-FPM.

Ricarica dopo ogni modifica

sudo systemctl reload php8.3-fpm nginx
Sull'hosting EGPHP questi limiti sono fissati per piano e si possono alzare dal pannello. Vedi anche Un limite di caricamento che ignora il tuo php.ini.