A failed upload is almost always one of three limits, and raising the one you know about leaves the other two in the way. All three have to be at least as large as the file.

The three

  • upload_max_filesize (PHP) - the largest single file.
  • post_max_size (PHP) - the whole request, so it must be LARGER than the file: the form fields count too.
  • client_max_body_size (Nginx) - the web server refuses before PHP is ever reached.
; php.ini
upload_max_filesize = 64M
post_max_size = 72M
memory_limit = 256M
# nginx
client_max_body_size 72M;

Which one refused

  • 413 Request Entity Too Large - Nginx. PHP never saw it.
  • A PHP message about the size - upload_max_filesize.
  • An empty $_POST with no error - post_max_size. PHP discards the whole request silently, which is why this one is so confusing.

Confirm the change took

php -i | grep -E "upload_max_filesize|post_max_size"
That reads the CLI configuration, which is often a different file from the one the web server uses. Trust a phpinfo() page over the command line - it is the only one that shows what your site actually runs with.
WordPress shows the effective limit on the media page. If it still shows the old number after a change, PHP-FPM was not reloaded: systemctl reload php8.3-fpm.