🧰
Hosting

Enabling PHP extensions: intl, gd, imagick and zip

12.11.2026
← All articles

Installing a CMS, running Composer or opening WordPress Site Health often produces a warning that a required PHP extension is missing. Core PHP covers the basics, while image processing, archives and locale-aware formatting live in extensions. The four most requested are intl, gd, imagick and zip.

What each extension does

intl

Built on the ICU library, intl formats dates, numbers and currencies and sorts text according to language rules, such as month names in Uzbek or sums with proper separators. Many frameworks and CMSs (some Laravel helpers, Symfony components, Magento) require or strongly recommend it. ICU has separate Latin and Cyrillic Uzbek locales:

$money = new NumberFormatter('uz_Latn_UZ', NumberFormatter::CURRENCY);
echo $money->formatCurrency(150000, 'UZS');

The exact output depends on the server's ICU version, so test it on your own server before relying on a particular format.

gd

gd reads, resizes, crops and watermarks images and converts formats. CMSs use it for thumbnails, CAPTCHAs and charts. WebP or AVIF support depends on how it was built; check with gd_info().

imagick

imagick wraps ImageMagick: more formats, better colour handling and higher-quality downscaling. PDF previews usually go through it, which also requires Ghostscript and an ImageMagick security policy that allows PDF. WordPress prefers imagick over GD when available.

zip

zip provides ZipArchive for creating and extracting archives. Without it or a system unzip, Composer may fall back to slower methods or warn. Backup plugins and Excel libraries (XLSX is a zip archive) depend on it too.

Checking what is loaded

Check the PHP that serves your site, since the CLI may be a different version. Use a temporary file and delete it afterwards:

<?php
foreach (['intl', 'gd', 'imagick', 'zip'] as $ext) {
    echo $ext . ': ' . (extension_loaded($ext) ? 'yes' : 'no') . "<br>";
}

Over SSH: php -m | grep -E 'intl|gd|imagick|zip', as long as it is the same PHP version as the site.

On shared hosting

Extensions are installed server-wide and managed only as far as the panel allows. In ISPmanager you choose the PHP version per site, and depending on server configuration an extension list may be shown for it. Often the fix is simply switching from an outdated PHP version, after checking that your CMS and plugins support the newer one. sayt.uz customers open the panel from the sayt.uz cabinet and can open a support ticket naming the site, PHP version and extension needed.

On your own VPS

sudo apt update
sudo apt install php8.3-intl php8.3-gd php8.3-zip php-imagick
sudo systemctl restart php8.3-fpm

Ubuntu 24.04 ships PHP 8.3; adjust package names for other versions and restart apache2 instead if PHP runs as an Apache module. If an extension is installed but disabled, use sudo phpenmod intl.

Example: a training centre in Andijan

A training centre in Andijan built a Laravel student portal on example.uz. It worked locally, but on the server composer install failed with "Root composer.json requires PHP extension ext-intl", and certificate previews needed imagick. The site was set to an old PHP version without intl. After updating the version in the panel and having support enable the missing extensions, the install succeeded and previews worked.

Tips

Related articles

📦 Moving Away from Plesk: What to Take and What Not to Forget ⏱️ How an every-minute cron job weighs on your server — and how to lighten it 🧪 Deploying a Flask App to Hosting: wsgi, Passenger, Gunicorn and Safe Settings 🚀 PHP 8.5: The Pipe Operator, the URI Extension and Other New Features
🌐 Language
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English ✓