• If you are still using CentOS 7.9, it's time to convert to Alma 8 with the free centos2alma tool by Plesk or Plesk Migrator. Please let us know your experiences or concerns in this thread:
    CentOS2Alma discussion

Resolved Cron error - Ioncube loader

alinthda

New Pleskian
Hello everyone,

Since an update of plesk (17.8.11 n ° 6), I receive cron emails about ioncube:


From: [email protected] (Cron Daemon)
To: [email protected]


Subject: [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime)

Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: undefined symbol: zend_ce_division_by_zero_error
Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: undefined symbol: zend_ce_division_by_zero_error
Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.0.so: undefined symbol: zend_ce_division_by_zero_error



My system:
-Ubuntu server 14.04
- Plesk onyx 17.8.11 n ° 6

If anyone can help me, thanks in advance
and sorry for my bad English :)
 
Try to fix it with command

# dpkg-reconfigure php5-ioncube-loader
 
I already tried, it does not work.
But, The problem just disappeared by updating ubuntu 14.04 => 16.04
 
I've got nearly the same error, but was not able to upgrade the server 14.04 => 16.04 at the moment. Therefore I had to investigate a little bit. Now I want to tell the solution that works for me. Perhaps it may be helpful for someone other.

Short version:
Cause of the error is a mismatch between used php-version and ioncube-version given by php.ini thru maintenance script.
Changed the script in /usr/lib/php/maxlifetime to use the command 'php' instead of 'php5' solved the issue.

Long version - The whole story in detail:
Behavior:
The error was shown ONLY by cron-service. Normal php-operations from commandline or web-pages are all ok without errors.
php -v shows me that php 7.1 is working and normal ioncube loading without problems:

$ php -v
PHP 7.1.20 (cli) (built: Jul 20 2018 16:08:02) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.2.1, Copyright (c) 2002-2018, by ionCube Ltd.
with Zend OPcache v7.1.20, Copyright (c) 1999-2018, by Zend Technologies


But testing the script /usr/lib/php/maxlifetime at commandline gives the same error like the cron-script:
$ /usr/lib/php5/maxlifetime
Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: undefined symbol: zend_interrupt_function
Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: undefined symbol: zend_interrupt_function
Failed loading /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: /usr/lib/php5/20121212/ioncube_loader_lin_7.1.so: undefined symbol: zend_interrupt_function
24


Why get (nearly) nobody else this error? And why he disappeared after system-upgrade as shown above?
This is because I - and perhaps User alinthda too - had before manual changed the php-version used at the commandine.

Plesk stores its own php installations in /opt/plesk/php/{version} and in the GUI it is possible to choose one of them for the virtual-host-config.
At the commandline is normally not the plesk version, but the OS-Vendor-version active. For ubuntu 14.04 it was some sort of php5.
But to use composer at cli for my drupal installation, the php-version at cli have to match the version at the virtuall host to avoid that composer loads wrong libraries and the site crashes.

In ubuntu 14.04 the /usr/bin/php command is not the command itself, but a symlink at /etc/alternatives/php, which again is a symlink at /usr/bin/php5.
Therefore, if you type php, the system calls /usr/bin/php5.
I had changed this with a symlink to plesk's php 7.1, which was used for the virtual host.
# ln -s /opt/plesk/php/7.1/bin/php /etc/alternatives/php

The maintenance-script /usr/lib/php5/maxlifetime don't use the long way /usr/bin/php => /etc/alternatives/php => /usr/lib/php5 but calls php5 directly. It goes wrong, because this do not respect the new target of the php command and the ini-files now are for the 7.1 version.

Line 8 of /usr/lib/php5/maxlifetime in original is:
cur=$(php5 -c /etc/php5/${sapi}/php.ini -d "error_reporting='~E_ALL'" -r 'print ini_get("session.gc_maxlifetime");')

Now I removed the first number 5:
cur=$(php -c /etc/php5/${sapi}/php.ini -d "error_reporting='~E_ALL'" -r 'print ini_get("session.gc_maxlifetime");')

therefore the command goes the long way via /etc/alternatives and calls /opt/plesk/php/7.1/bin/php, wich match php.ini for 7.1 and command-version 7.1, and ioncube-loader for 7.1 is happy again.
Issue solved.

Hopefully my manipulation will not cause other side effects. At the moment I cannot se some.
 
Back
Top