Applies to CiviCRM 6.x · Joomla 5.4 and 6 Updated 16 Oct 2026

Most failed CiviCRM upgrades we see don't fail in CiviCRM. They fail on the server: a PHP extension that isn't there, a database too old for Joomla 6, a command-line PHP that differs from the web one. Fifteen minutes of checking saves a broken weekend.

The target

For CiviCRM 6.x on Joomla 6 you need what both ask for:

CheckMinimumBetter
PHP (web and CLI)8.38.4
MySQL8.0.138.4
MariaDB (instead of MySQL)10.410.6+ / 11.4
PHP memory limit256M512M
PHP extensionsbcmath, intl, zip, mbstring, gd, dom, simplexml, json, curl, mysqli/pdo_mysql

On Joomla 5.4, PHP 8.1+ and MySQL 8.0.13 / MariaDB 10.4 already apply; CiviCRM 6.16+ recommends PHP 8.3 or newer.

1. PHP on the web

In Joomla: System » System Information » PHP Information. Note the version and search the page for bcmath, intl, zip and mbstring. CiviCRM's own System Status screen also warns about missing extensions.

2. PHP on the command line

This is the one that gets missed. Cron and cv run on the command-line PHP, which can be a different version with different extensions:

php -v
php -m | grep -Ei 'bcmath|intl|zip|mbstring|mysqli|pdo_mysql'
php -i | grep -E 'memory_limit|max_execution_time'

If php is the wrong version, find the right binary (for example /usr/bin/php8.3 or, on cPanel, /opt/cpanel/ea-php83/root/usr/bin/php) and use its full path in cron.

3. The database

In Joomla: System Information » System Information shows the database version. Or from the shell:

mysql -V
mysql -u user -p -e "SELECT VERSION();"

MySQL 5.7 or MariaDB 10.3 means a database upgrade before Joomla 6 – on shared hosting, often a move to a newer plan or server. Ask the host early; it is the slowest part to arrange.

If CiviCRM uses its own database, check it lives on the same server version, and read about the separate-database upgrade bug.

4. Limits that matter during the upgrade

  • memory_limit – 256M at least; the CiviCRM installer and database upgrade are memory-hungry.
  • max_execution_time – raise to 300–600 seconds for the upgrade itself.
  • upload_max_filesize – only matters if you upload the package through the browser; unzipping into tmp and using Install from Folder avoids it.

5. Disk space and permissions

  • Room for a full backup plus the unzipped CiviCRM package (several hundred MB).
  • The web server user can write to media/civicrm and the Joomla tmp folder.

Write it down

Keep the results with your upgrade plan: PHP web/CLI versions, extensions, database version, limits, and who changes what (you or the host). If anything is below the minimum, fix the server first and upgrade second – never both on the same night.

Next: audit your CiviCRM extensions for PHP 8.3, then follow the upgrade walkthrough.

The whole check as one script

Run it as the user cron runs as, so you see the CLI PHP that matters:

# terminal – precheck.sh
#!/bin/sh
echo "PHP CLI: $(php -r 'echo PHP_VERSION;')  ($(command -v php))"
for ext in bcmath intl zip mbstring gd dom simplexml json curl mysqli pdo_mysql; do
  php -m | grep -qix "$ext" || echo "MISSING extension: $ext"
done
php -r 'printf("memory_limit=%s max_execution_time=%s
", ini_get("memory_limit"), ini_get("max_execution_time"));'
mysql -N -e "SELECT VERSION();"
df -h . | tail -1
# CiviCRM's own view of the environment (after install)
cv status --cwd=/var/www/example.org

Compare the CLI result with System → System Information in Joomla (the web PHP). Any difference between the two is a cron problem waiting to happen.

Not sure your hosting can take it? We include a server check in every CiviCRM upgrade review, and help move to a host that meets it.

CiviCRM Joomla 6 upgrade →