This is an old revision of the document!
Configuring cPanel EA4 + CloudLinux + LSWS to Use CloudLinux PHP Selector Instead of EA4 MultiPHP
If you use cPanel EA4 on a CloudLinux system, the LiteSpeed auto-installer script will add the proper external apps for both EA4 MultiPHP and CloudLinux PHP Selector automatically, when installing LSWS. PHP handlers will be set to use EA4 MultiPHP by default with version 5.6.
The following external apps are installed:
The suffixes .php
and .php5
will be handled by lsphp56
by default.
If you want to use CloudLinux PHP Selector, you should change .php
and .php5
to be handled by cl_phpselector
.
Changing the Default
As you may know, when CloudLinux is integrated with cPanel Easy Apache 4, the CloudLinux PHP Selector will only be used if the cPanel MultiPHP version for a domain is the same as the cPanel system default PHP version, which was set from the very beginning. (See “Understanding How This Works” below for more information.)
For example, say the cPanel system PHP default version is ea-php56
for example1.com
, and MultiPHP manager is set to ea-php56
. Then cPanel will add the following to the .htaccess
in example1.com
's document root:
# php -- BEGIN cPanel-generated handler, do not edit # Set the “ea-php56” package as the default “PHP” programming language. <IfModule mime_module> AddType application/x-httpd-ea-php56 .php .php5 .phtml </IfModule> # php -- END cPanel-generated handler, do not edit
So, what do you do if you want to use CL PHP Selector 7.0 (for example)?
It's important to understand how the CloudLinux PHP Selector works with cPanel EA4. In this case, you just need to check which CloudLinux PHP Selector is set for this account. If CL PHP Selector is set to native
, then cPanel EA4 MultiPHP version is used. If a CL PHP Selector version other than native
is used, then the web server will use the CL PHP Selector version chosen.
There's no need to worry about AddType application/x-httpd-ea-php56
in the .htaccess
file. It will be overridden by the CloudLinux PHP Selector setting.
Run the following command to check example1
user:
/usr/bin/selectorctl --user-summary --user example1 5.1 e - - 5.2 e - - 5.3 e - - 5.4 e - - 5.5 e - - 5.6 e - - 4.4 e - - 7.0 e - - 7.1 e - - native e d s
You can set it to use CL PHP Selector 7.0
instead of native
:
selectorctl --set-user-current=7.0 --user=example1
To verify:
/usr/bin/selectorctl --user-summary --user example1 5.1 e - - 5.2 e - - 5.3 e - - 5.4 e - - 5.5 e - - 5.6 e - - 4.4 e - - 7.0 e - s 7.1 e - - native e d -
Check the PHP Info page, and you should see CL PHP Selector 7.0 is in use.
Understanding How This Works
How does cPanel know whether to get the PHP version from .htaccess
or from the CloudLinux PHP Selector?
A file search for .htaccess
is performed in the current directory and in the parent directories. If the file is not found, then the system default PHP version is applied. The system default PHP version can be changed via the CloudLinux PHP Selector.
If .htaccess
is found, then the following rules are applied to determine the PHP version:
- If CageFS is disabled, then the CL PHP Selector is not active and the PHP version from
.htaccess
is applied. - If CageFS is enabled, then:
- If the PHP version specified in
.htaccess
differs from the ystem default, then the.htaccess
version is applied. - If the system default PHP version is specified in the
.htaccess
file, then the CL PHP Selector version is applied:- If
native
is chosen in the CL PHP Selector, then the.htaccess
PHP version is applied. - If the PHP version chosen in the CL PHP Selector differs from
native
, then the CL PHP Selector version is applied.
Note: If you are using a version of cPanel prior to 11.56, please be aware that it does not support hooks for MultiPHP Manager. As a result, such changes are handled by cron job and come with up to a 10-minute delay.
For more on this, see the CloudLinux documentation.
alt-php within Multi-php Manager
It will be supported from 5.3RC1
In cPanel & WHM version 66 and later, EasyApache 4 allows you to use Vendor-provided PHP versions such as CloudLinux PHP selector right from MultiPHP Manager, such as alt-php44
, alt-php51
, alt-php52
, alt-php53
, alt-hpp54
, alt-php55
, alt-php56
, alt-php70
, alt-php71
, alt-php72
, they will be supported by LiteSpeed from 5.3RC1. If your version under it, please continue to use ea-phpxx
and follow the above steps to determine if CloudLinux PHP selector is used, but not directly from MultiPHP Manager.
Why CloudLinux PHP selector works on Apache but does not work on LSWS?
At cPanel EA4 and CloudLinux environment, Most of the LSWS LSPHP external apps such as lsphpxx are poiting to ea-phpxx, instead of alt-phpxx. Only one external app “cl_phpselector” is poiting to “/usr/local/bin/lsphp” (CloudLinux PHP selector binary).
lsphp54-> /opt/cpanel/ea-php54/root/usr/bin/lsphp lsphp55-> /opt/cpanel/ea-php55/root/usr/bin/lsphp lsphp56-> /opt/cpanel/ea-php56/root/usr/bin/lsphp lsphp70-> /opt/cpanel/ea-php70/root/usr/bin/lsphp lsphp71-> /opt/cpanel/ea-php71/root/usr/bin/lsphp lsphp72-> /opt/cpanel/ea-php72/root/usr/bin/lsphp cl_phpselector->/usr/local/bin/lsphp
For PHP handlers:
php -> cl_phpselector php5 -> cl_phpselector php54-> lsphp54 php55-> lsphp55 php56-> lsphp56 php70-> lsphp70 php71-> lsphp71 php72-> lsphp72
The above is the recommended way and default setup for such an environment.
Some users may want to point every external handler to alt-phpxx. Such as the following:
lsphp54-> /opt/alt/php54/usr/bin/lsphp lsphp55-> /opt/alt/php55/usr/bin/lsphp lsphp56-> /opt/alt/php56/usr/bin/lsphp lsphp70-> /opt/alt/php70/usr/bin/lsphp lsphp71-> /opt/alt/php71/usr/bin/lsphp lsphp72-> /opt/alt/php72/usr/bin/lsphp cl_phpselector->/usr/local/bin/lsphp
Which causes a problem: when a user account inherited cpanel system default PHP version and CloudLinux PHP selector is set to use php70 for that user account, Why apache seems returning the right version of php70 but LSWS seems always returning php56 or other php version alighing with cpanel multi-php manager system default php version?
Actually there is nothing wrong with LSWS, LSWS is still follow CloudLinux-cPanel-EA4 php determination work flow.
When a user account inherited cpanel system default PHP configurated from cPanel Multi PHP Manager, on Apache, CloudLinux PHP Selector is used hence it returns right php version. On LSWS, since you change the external app associated with cpanel default version ea-php56 in this example. It will look for suffix php56, which is currently using lsphp56.
lsphp56 was: lsphp56→ /opt/cpanel/ea-php56/root/usr/bin/lsphp
However somehow you changed it to the following already: lsphp56→ /opt/alt/php56/usr/bin/lsphp
then /opt/alt/php56/usr/bin/lsphp is differnt than cpanel default ea-php56( /opt/cpanel/ea-php56/root/usr/bin/lsphp), hence CloudLinux PHP Selector won't be used, instead, lsphp56 (/opt/alt/php56/usr/bin/lsphp) will be always used for LSWS.
How to fix it? The key is to tell LSWS to use CloudLinux PHP selector instead of a particular version of alt-php.
You can either update external app lsphp56 to point to PHP selector binary “/usr/local/bin/lsphp”, or more easily, update php handler of suffix “php56” to served by “cl_phpselector” instead of “lsphp56”.
You can apply the second solution through command line or through LSWS Web Admin Console.
Through command line: vi /usr/local/lsws/conf/httpd_config.xml
Current:
<scriptHandler> <suffix>php56</suffix> <type>lsapi</type> <handler>lsphp56</handler> </scriptHandler>
Change to:
<scriptHandler> <suffix>php56</suffix> <type>lsapi</type> <handler>cl_phpselector</handler> </scriptHandler>
Through LSWS Web Admin Console:
Restart LSWS after configuration change.