Fixing “PHP Startup: Unable to Load Dynamic Library 'intl'” on CWP Internal PHP 7.1 (Roundcube Spoofchecker Error)
How you can fix the “PHP Startup: Unable to load dynamic library 'intl'” error and Roundcube “Class 'Spoofchecker' not found” issue on AlmaLinux 8 / CentOS Web Panel (CWP) server.
This guide focuses on CWP’s internal PHP 7.1 and the intl/ICU 50 compatibility problem.
1. Identify that CWP is using internal PHP 7.1
Even if the CWP panel shows PHP 8.3 for websites, internal services like Roundcube usually run on:
2. Check intl module loading error
If you see a warning similar to:
then the intl extension is compiled against ICU 50, which is missing on the system.
3. Roundcube error: Spoofchecker class not found
In Roundcube logs you will see:
This happens because the Spoofchecker class is provided by the intl extension, which failed to load.
4. Confirm intl.so exists and check its dependencies
First, verify that intl.so is present:
Then check its linked libraries:
If you see: libicui18n.so.50 => not found libicuuc.so.50 => not found libicudata.so.50 => not found libicuio.so.50 => not found libicutest.so.50 => not found libicutu.so.50 => not found then intl.so is compiled against ICU 50, which is missing.
5. Check existing ICU libraries
If only ICU 60/69 libraries are present (e.g. libicui18n.so.60, libicui18n.so.69) and no ICU 50, intl.so cannot load.
6. Install ICU 50 compatibility package (Main Fix)
To satisfy intl.so dependencies, install ICU 50:
This package provides the required ICU 50 libraries (libicui18n.so.50, libicuuc.so.50, libicudata.so.50, libicuio.so.50, libicutest.so.50, libicutu.so.50).
7. Restart CWP services
systemctl restart cwp-phpfpm
8. Verify intl is now loaded in CWP internal PHP
If the output shows:
then the intl extension is successfully loaded.
9. Confirm Roundcube is working
Check Roundcube error logs again:
The “Class 'Spoofchecker' not found” error should be gone, and Roundcube should load without Internal Server Error.
Summary
On CWP with AlmaLinux 8, the internal PHP 7.1 may ship with an intl extension compiled against ICU 50, while the system only has ICU 60/69. Installing the libicu50 package resolves the missing ICU 50 libraries, allowing intl.so to load, restoring the Spoofchecker class, and fixing both the PHP startup warnings and Roundcube errors.