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:

External app lsphp56:

External app cl_phpselector:

PHP Handlers:

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.

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.

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:

  1. If CageFS is disabled, then the CL PHP Selector is not active and the PHP version from .htaccess is applied.
  2. If CageFS is enabled, then:
    1. If the PHP version specified in .htaccess differs from the ystem default, then the .htaccess version is applied.
    2. If the system default PHP version is specified in the .htaccess file, then the CL PHP Selector version is applied:
      1. If native is chosen in the CL PHP Selector, then the .htaccess PHP version is applied.
      2. 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 is supported from LSWS 5.3RC1 directly from MultiPHP Manager

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 have been supported by LiteSpeed from 5.3RC1. LSWS 5.2.x and below do not support them and if you are still using such LSWS legacy version, please continue to use ea-phpxx only and follow the above steps to determine if CloudLinux PHP selector is used, but not directly from MultiPHP Manager.

Using cpanel MultiPHP manager is recommended way since it is easy to understand and supports both ea-php and alt-php. CloudLinux PHP selector sometime might be a little complicated to understand, hence not recommended. Advanced user can use either one as you prefer, as far as you understand how CloudLinux PHP selector with WHM/cPanel MultiPHP Manager work together. The following section could be a good example of how complicated it is when a user trying to enforce everything to alt-php and using CloudLinux PHP Selector.

In a cPanel EA4 and CloudLinux environment, Most of the LSWS LSPHP external apps such as lsphpxx are pointing to ea-phpxx, instead of alt-phpxx. Only one external app, cl_phpselector is pointing to /usr/local/bin/lsphp (the 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

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 is the default setup for such an environment.

Some users may want to point every external handler to alt-phpxx, like so:

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

This causes a problem.

For example: A user account inherits the cPanel system default PHP version, and the CloudLinux PHP selector is set to use php70 for that user account. Apache seems to return the correct version of php70, but LSWS always seems to return php56 (or whatver cPanel's Multi PHP Manager system default PHP version is).

In actuality, there is nothing wrong with LiteSpeed Web Server. LSWS is following the correct CloudLinux-cPanel-EA4 PHP determination work flow.

  • Apache: When a user account inherits the cPanel system default PHP configuration from cPanel Multi PHP Manager, the CloudLinux PHP Selector is used. Hence it returns the right PHP version.
  • LSWS: Since you changed the external app associated with the cPanel default version (ea-php56 in this example), it will look for the suffix php56, which points to lsphp56.

lsphp56 was:

lsphp56-> /opt/cpanel/ea-php56/root/usr/bin/lsphp

You changed it to:

lsphp56-> /opt/alt/php56/usr/bin/lsphp

/opt/alt/php56/usr/bin/lsphp is differnt than cPanel's default ea-php56(which is /opt/cpanel/ea-php56/root/usr/bin/lsphp), hence the CloudLinux PHP Selector won't be used. Instead, lsphp56 (or, /opt/alt/php56/usr/bin/lsphp) will be always used for LSWS.

So, how can you get the PHP version you want? The key is to tell LSWS to use the CloudLinux PHP selector instead of a particular version of alt-php.

You can either update the external app lsphp56 to point to PHP selector binary /usr/local/bin/lsphp, or more easily, update the PHP handler of suffix php56 to be served by cl_phpselector instead of lsphp56.

You can apply the second solution through the command line or through LSWS Web Admin Console.

Through the Command Line

vi /usr/local/lsws/conf/httpd_config.xml

Change:

  <scriptHandler>
    <suffix>php56</suffix>
    <type>lsapi</type>
    <handler>lsphp56</handler>
  </scriptHandler>

To:

  <scriptHandler>
    <suffix>php56</suffix>
    <type>lsapi</type>
    <handler>cl_phpselector</handler>
  </scriptHandler>
  

Through LSWS Web Admin Console

Before: After:

Restart LSWS after any configuration change.

  • Admin
  • Last modified: 2019/01/09 20:38
  • by Jackson Zhang