ionCube Loader on Panelica — step by step
Panelica does not ship ionCube and has no one-click installer for it; you add it by hand. Panelica builds its own PHP under
The example uses PHP 8.3. Replace 8.3 with your version everywhere; nothing else changes.
1. Download the loaders
2. Put the loader in place
Use the plain file, not the one ending in
3. Create the ini — the file name matters
The
4. Verify before touching your sites
You should see:
Checking on the CLI first is the whole point: the CLI reads the same
5. Reload PHP for your sites
That is enough on a server with no sites yet. Panelica runs a separate PHP-FPM master per user, so if you already host sites, reload those too:
Three things worth knowing
If you would rather not do this by hand, open a ticket with your SSH details and the PHP version you need, and we will install and verify it for you.
Panelica does not ship ionCube and has no one-click installer for it; you add it by hand. Panelica builds its own PHP under
/opt/panelica/services/php/<version>/, so the paths are not the ones you know from cPanel or Plesk. Below is the procedure we verified on PHP 8.1, 8.2, 8.3, 8.4 and 8.5 with ionCube Loader 15.5.1.The example uses PHP 8.3. Replace 8.3 with your version everywhere; nothing else changes.
1. Download the loaders
Code:
cd /tmp
curl -LO https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xzf ioncube_loaders_lin_x86-64.tar.gz
2. Put the loader in place
Code:
mkdir -p /opt/panelica/services/php/8.3/ioncube
cp /tmp/ioncube/ioncube_loader_lin_8.3.so /opt/panelica/services/php/8.3/ioncube/
Use the plain file, not the one ending in
_ts. Panelica's PHP is built non-thread-safe, so the thread-safe loader will not load.3. Create the ini — the file name matters
Code:
printf 'zend_extension=/opt/panelica/services/php/8.3/ioncube/ioncube_loader_lin_8.3.so\n' \
> /opt/panelica/services/php/8.3/etc/conf.d/00-ioncube.ini
The
00- prefix is not cosmetic. Two reasons:- ionCube must be the first zend_extension. Name the file
ioncube.iniand it loads after10-opcache.ini; PHP then refuses to start at all withThe Loader must appear as the first entry in the php.ini file. We reproduced exactly this on 8.1, 8.2 and 8.4 before settling on the00-name. - It survives package updates. When Panelica applies a PHP package it regenerates the ini files that begin with
10-,15-and20-. Anything on00-is left alone, so your loader stays enabled after an update.
4. Verify before touching your sites
Code:
/opt/panelica/services/php/8.3/bin/php -v
You should see:
Code:
with the ionCube PHP Loader v15.5.1, Copyright (c) 2002-2026, by ionCube Ltd.
Checking on the CLI first is the whole point: the CLI reads the same
conf.d as your sites, so a wrong architecture, a _ts file or a bad load order shows up here without any site going down.5. Reload PHP for your sites
Code:
/opt/panelica/bin/pn-service restart php-8.3
That is enough on a server with no sites yet. Panelica runs a separate PHP-FPM master per user, so if you already host sites, reload those too:
Code:
systemctl list-units --plain --no-legend 'panelica-php-fpm-8.3-user@*' \
| awk '{print $1}' | xargs -r systemctl restart
Three things worth knowing
- ionCube and OPcache run together without trouble. Leave both enabled.
- On a version that loads ionCube, Panelica turns opcache JIT off by itself and writes
conf.d/99-panelica-jit.ini. That is deliberate, not a fault: JIT and ionCube are mutually exclusive, and PHP used to print a warning on every start. You lose no performance, because JIT could never engage while ionCube was loaded. - ionCube is enabled for the whole PHP version, never per site. A
zend_extensionis loaded when the engine starts and cannot be loaded at pool level, so per-user scoping is not possible. It does no harm to your other sites; they simply have the loader too.
If you would rather not do this by hand, open a ticket with your SSH details and the PHP version you need, and we will install and verify it for you.