PHP Requirements & Health Check
Official site: https://www.php.net/
The ictVoIP Billing addon includes a built-in Health Check
(/modules/addons/ictvoipbilling/healthcheck.php) that validates the
PHP environment on the WHMCS host before and during operation. Use this
guide to configure PHP so the Health Check returns positive results and
large operations such as tariff imports and Autobill runs do not time
out.
Note
These settings apply to the WHMCS host running the ictVoIP Billing addon and server modules — not the FusionPBX/FS PBX server itself.
Note
The America/Toronto timezone used in the examples below is for
reference only. Replace it with the TZ identifier that matches your
WHMCS/PBX environment.
What the Health Check Verifies
Check |
Minimum to Pass |
Recommended for Production |
|---|---|---|
PHP Version |
7.4+ |
PHP 8.1 / 8.2 (match your WHMCS version and ionCube encoder availability) |
|
128M |
2048M minimum; 8192M for large tariff imports or high CDR volume |
|
60 |
4300 (long-running Autobill and tariff imports) |
|
— |
8600 |
|
— |
5000 |
|
8M |
100M (based on maximum tariff CSV size) |
|
8M |
100M (must be ≥ |
|
Must be set |
Set to your PBX/billing timezone, e.g. |
|
— |
3600 |
|
— |
Off (prevents truncated Health Check/CSV output) |
Required PHP Extensions
The Health Check confirms the following extensions are loaded:
pdopdo_mysqlcurlmbstringjsonopensslxml
On cPanel/EA4 these are typically provided by packages such as
ea-php82-php-curl, ea-php82-php-mbstring,
ea-php82-php-mysqlnd, and ea-php82-php-xml. Enable them via
WHM → EasyApache 4 or MultiPHP INI Editor / MultiPHP Manager
for the PHP version assigned to the WHMCS account.
Apache (.htaccess / mod_php)
When PHP runs as an Apache module (mod_php), settings can be placed
in the WHMCS root .htaccess file. Adjust the IfModule name to
the PHP version in use (for example, php82_module):
<IfModule php82_module>
php_flag display_errors On
php_value max_execution_time 4300
php_value max_input_time 8600
php_value max_input_vars 5000
php_value memory_limit 8192M
php_value session.gc_maxlifetime 3600
php_value session.save_path "/tmp"
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value date.timezone "America/Toronto"
php_flag zlib.output_compression Off
</IfModule>
Warning
display_errors On should be enabled only for troubleshooting. Set
it to Off in production once the Health Check passes.
PHP-FPM / CGI (no mod_php)
php_flag / php_value directives are only valid with
mod_php. On hosts running PHP-FPM or CGI (common on cPanel
with ea-php), use one of these instead:
Place a .user.ini file in the WHMCS root directory:
memory_limit = 8192M
max_execution_time = 4300
max_input_time = 8600
max_input_vars = 5000
upload_max_filesize = 100M
post_max_size = 100M
date.timezone = "America/Toronto"
session.gc_maxlifetime = 3600
zlib.output_compression = Off
Or set the same values per-domain via cPanel → MultiPHP INI Editor
(or php.ini where permitted).
Virtualmin
For Virtualmin hosts, PHP settings are typically managed through the
virtual server’s PHP configuration rather than .htaccess.
Edit
php.inifor the virtual server, for example:/home/USERNAME/etc/php.ini(older Virtualmin)/home/USERNAME/etc/php8.2/php.ini(per-version PHP-FPM)/home/USERNAME/etc/php8.3/php.ini
Add or update the following values in the active
php.ini:
memory_limit = 8192M
max_execution_time = 4300
max_input_time = 8600
max_input_vars = 5000
upload_max_filesize = 100M
post_max_size = 100M
date.timezone = "America/Toronto"
session.gc_maxlifetime = 3600
zlib.output_compression = Off
Restart the PHP-FPM pool for the virtual server after saving. In Virtualmin, go to Server Configuration → PHP Options to confirm which PHP version and configuration file are active for the domain.
ionCube Loader Path
The ionCube Loader is a separate binary that is not located in PHP’s
normal extension_dir. It is usually installed under
/usr/local/ioncube/ or, in Virtualmin, copied into the virtual
server’s config directory.
Find the available ionCube Loader files on the WHMCS host:
find / -name 'ioncube_loader_lin_*.so' 2>/dev/null
On a cPanel/Virtualmin host the output will show multiple loaders, for example:
/usr/local/ioncube/ioncube_loader_lin_8.2.so /usr/local/ioncube/ioncube_loader_lin_8.3.so /usr/local/ioncube/ioncube_loader_lin_8.4.so /home/USERNAME/etc/ioncube_loader_lin_8.2.so
Find the active PHP configuration files:
php -i | grep "Loaded Configuration File" php -i | grep "Additional .ini files parsed"
The ionCube Loader is often loaded through an additional
.inifile in aconf.ddirectory rather than the mainphp.ini. A common PHP-FPM example is:/etc/php/8.2/fpm/conf.d/00-ioncube.ini
The active CLI example may also show:
Additional .ini files parsed => /etc/php/8.4/cli/conf.d/00-ioncube.ini,
The ionCube
.inifile contains a singlezend_extensionline:zend_extension = /usr/local/ioncube/ioncube_loader_lin_8.2.so
For a Virtualmin virtual server, the per-domain path is commonly:
zend_extension = /home/USERNAME/etc/ioncube_loader_lin_8.2.so
Replace
USERNAMEwith the WHMCS system user,8.2with the active PHP version, and use the actual.inifile shown byphp -i.
LiteSpeed (lsapi)
LiteSpeed honours php_value/php_flag in .htaccess through
the lsapi_module:
<IfModule lsapi_module>
php_flag display_errors On
php_value max_execution_time 4300
php_value max_input_time 8600
php_value max_input_vars 5000
php_value memory_limit 8192M
php_value session.gc_maxlifetime 3600
php_value session.save_path "/tmp"
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value date.timezone "America/Toronto"
php_flag zlib.output_compression Off
</IfModule>
LiteSpeed Timeout Overrides
If you encounter a 500 Server Error / timeout during large tariff
imports or Autobill runs on a large number of CDR records, add
LiteSpeed’s no-abort overrides to .htaccess:
RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]
Timezone Fallback (configuration.php)
If your hosting provider does not allow overriding date.timezone
through php.ini, .user.ini, or .htaccess, set the default
timezone directly in the WHMCS configuration.php file so CRON runs
use the correct timezone:
date_default_timezone_set('America/Toronto');
Edit the value to the timezone of your PBX server (TZ identifier
format, for example America/New_York, Europe/London).
Verifying with the Health Check
Log in to the WHMCS admin area.
Run the Health Check from the ictVoIP Billing addon dashboard, or browse directly to:
https://yourwhmcs.com/modules/addons/ictvoipbilling/healthcheck.phpConfirm the PHP Environment section reports pass (green) for:
PHP Version (7.4+)
PHP Extensions (all required extensions loaded)
PHP Settings (memory, execution time, upload sizes, timezone)
Re-run the check after each PHP or web server change. If
.htaccessor.user.iniedits are not taking effect, confirm which PHP handler (mod_php, PHP-FPM, or LiteSpeed lsapi) is assigned to the account.