This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
plugins:phpswitcher [2017/09/13 23:39] nuxwin |
plugins:phpswitcher [2019/10/04 20:22] (current) nuxwin |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | |||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | **Bear in mind that this documentation is for the last released version. If you use an older version, you must refer to the README.md file inside the plugin archive.** | + | **Bear in mind that this documentation is for the lastest PhpSwitcher plugin version. If you use an older version, you must refer to the README.md file inside the plugin archive.** |
</WRAP> | </WRAP> | ||
<markdown> | <markdown> | ||
- | # i-MSCP PhpSwitcher plugin | + | # i-MSCP PhpSwitcher plugin v5.0.3 |
Provides additional PHP versions for customers. | Provides additional PHP versions for customers. | ||
- | # Requirements | + | ## Requirements |
- | - i-MSCP Serie ≥ 1.4.x | + | - One of the [supported distributions](#supported_distributions) |
- | - Either the Fcgid or the PHP-FPM Apache2 httpd server implementation | + | - i-MSCP Serie ≥ 1.5.3 |
+ | - The Fcgid or the FPM i-MSCP httpd server implementation | ||
- | You can switch between HTTPD server implementations by executing the following | + | ### Supported distributions |
- | commands: | + | |
- | ``` | + | - Debian Jessie 8.x, Debian Stretch 9.x, Debian Buster 10.x |
- | cd <path_to_your_imscp_archive> | + | - Ubuntu Xenial Xerus 16.04, Ubuntu Bionic Beaver 18.04 |
- | perl imscp-autoinstall -dar httpd | + | - Devuan Jessie 1.x, Devuan ASCII 2.x |
- | ``` | + | |
+ | ### Recommendations | ||
- | Note that when asked, it is recommended to choose the `per_site` PHP | + | Recommended use of this plugin is with the i-MSCP FPM httpd server in **UDS** |
- | configuration level. This allow your customers to choose a different PHP | + | mode, and with the **per_site** PHP configuration level. |
- | versions for any of sites. | + | |
- | # Installation | + | ## Installation |
- | 1. Be sure that all requirements as stated in the requirements section are met | + | 1. Be sure that all requirements are met |
2. Upload and install the plugin through the plugin management interface | 2. Upload and install the plugin through the plugin management interface | ||
- | 3. Compile and install your PHP versions (see below to know how) | + | 3. Compile, install and/or register your PHP versions |
- | 4. Setup your PHP versions (see below to know how) | + | |
- | # Update | + | ## Update |
- | 1. Read the UPDATE file inside the plugin archive | + | 1. Read the UPDATE.md file inside the plugin archive |
- | 2. Be sure that all requirements as stated in the requirements section are met | + | 2. Be sure that all requirements are met |
3. Upload the plugin through the plugin management interface | 3. Upload the plugin through the plugin management interface | ||
- | 4. Re-compile your PHP versions if needed | + | 4. Compile, install and/or register your PHP versions |
- | # Glossary | + | ## Glossary |
In the documentation below, the following variables are used: | In the documentation below, the following variables are used: | ||
- | - %version% : One of available PHP version such as 4.4, 5.2, 5.4 ... | + | - %version% : One of available PHP version such as 7.1, 7.2, 7.3, 7.4 ... |
- | - %ymd% : The date of the day such as 20170306 | + | - %ymd% : The date of the day such as 20190831 |
- %installdir% : Installation directory such as /opt/phpswitcher/20170306 | - %installdir% : Installation directory such as /opt/phpswitcher/20170306 | ||
- | # Compiling and installing PHP versions | + | ## Compiled PHP versions |
- | This plugins comes with a Perl script) that is able to downloads, configures, | + | This plugin provides the `php_compiler.pl` script that can, compile and install |
- | compiles and installs additional PHP versions in one step, without any human | + | additional PHP versions in one step. It can also register them in the |
- | interaction. It can also automatically setup PHP versions. | + | Phpswitcher plugin. |
- | For instance, if you want to install all available PHP versions, you can | + | For example, if you want to compile and install all additional PHP versions, you |
- | execute the following command: | + | can execute the following command: |
- | ``` | + | ```shell |
- | cd /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl |
- | perl php_compiler.pl all | + | |
``` | ``` | ||
- | or if you want to install one or many specific PHP versions, you can execute | + | or if you want to install specific PHP versions: |
- | the following command: | + | |
- | ``` | + | ```shell |
- | cd /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl %version% %version% |
- | perl php_compiler.pl %version% %version% | + | |
``` | ``` | ||
- | You can also ask the compiler to automatically setup the PHP versions with | + | You can also automatically register the PHP versions in the PhpSwitcher plugin |
- | the `--auto-setup` command line option. For instance: | + | by passing the `--register` option. For instance: |
- | ``` | + | ```shell |
- | cd /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl --register %version% %version% |
- | perl php_compiler.pl --auto-setup %version% %version% | + | |
``` | ``` | ||
- | This will automatically configure, build, install and setup the specified PHP | + | Doing this avoid the need to register them manually through the PhpSwitcher |
- | versions. Doing this avoid the need to setup all PHP versions manually through | + | plugin administration interface. |
- | the PhpSwitcher administration interface. | + | |
- | To get list of all available command line options, you can execute the | + | ### Supported PHP versions |
- | following command: | + | |
- | ``` | + | The supported PHP versions are the last that were available when this plugin |
- | cd /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | version has been released. This means that by default, the versions provided by |
- | perl php_compiler.pl --help | + | the `php_compiler.pl` script can be lower than the last that were released on |
- | ``` | + | the PHP site. |
- | ## Supported PHP versions | + | Supported PHP versions are: `5.3` up-to `7.4` |
- | Supported PHP versions depend on the i-MSCP httpd server implementation in use. | + | #### Forcing the `php_compiler.pl` script to download latest PHP sources |
- | If you use the Fcgid Apache2 i-MSCP httpd server implementation, the following | + | You can ask the `php_compiler.pl` script to download latest PHP sources by |
- | PHP versions are supported: | + | passing the `--force-last` option. However, you must bear in mind that some |
+ | patches might not longer apply, in which case you should report us the failure | ||
+ | message by creating a new issue on our bug tracker. | ||
- | 4.4, 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1 | + | ### Download directory |
- | If you use the PHP-FPM Apache2 i-MSCP httpd server implementation, the | + | By default, the PHP sources are downloaded in the `/usr/local/src/phpswitcher` |
- | following PHP versions are supported: | + | directory. You can override the default download directory by passing the |
+ | `--download-dir` option to the `php_compiler.pl` script. | ||
- | 5.3, 5.4, 5.5, 5.6, 7.0, 7.1 | + | ### Build directory |
- | Note that the supported PHP versions are the last that were available when this | + | By default, the compiled PHP versions are build in the |
- | plugin version has been released. This means that by default, the versions | + | `/usr/local/src/phpswitcher/php%version%` directory. You can override the |
- | provided by the PHP compiler can be lower than the last that were released on | + | default build directory by passing the `--build-dir` option to the |
- | the PHP site. In such case, you can ask the PHP compiler to download the last | + | `php_compiler.pl` script. |
- | available PHP version by adding the `--force-last` command line option. | + | |
- | However, you must be aware that some patches could not longer apply on these | + | ### Installation directory |
- | versions. If so, you should report us the failure message by creating a new | + | |
- | issue on our bug tracker. | + | |
- | ## Build and installation directories | + | By default, the compiled PHP versions are installed in the |
+ | `/opt/phpswitcher/%ymd%/php%version%` directory. You can override the | ||
+ | default installation directory by passing the `--install-dir` option to the | ||
+ | `php_compiler.pl` script. | ||
- | By default the new PHP versions are build into the | + | ### Changes made on PHP sources |
- | `/usr/local/src/phpswitcher/php%version%` directory, and installed in the | + | |
- | `/opt/phpswitcher/%ymd%/php%version%` directory but you can change this | + | |
- | behavior with the `--install-dir` command line option. | + | |
- | ## SSL support for PHP 4.4 | + | A set of patches is applied on PHP sources before configuring them. The patches |
- | + | include the following changes: | |
- | PHP 4.4 is built against a bundled OpenSSL (openssl-0.9.8). | + | |
- | + | ||
- | ## SSL support for PHP ≥ 4.4 but < 5.6 | + | |
- | + | ||
- | For systems on which OpenSSL library is greater or equal to 1.1.0, PHP versions | + | |
- | greater than 4.4 but older than 5.6 are built against a bundled OpenSSL | + | |
- | (1.0.2l). | + | |
- | + | ||
- | ## Changes made on PHP versions | + | |
- | + | ||
- | PHP versions provided by the PHP compiler are almost identical to those that | + | |
- | are provided by the Debian team. For each PHP version, a set of patches is | + | |
- | applied on PHP upstream source before compiling them. The patches include the | + | |
- | following changes: | + | |
- Multiarch support | - Multiarch support | ||
- | - Usage of system libtool instead of the bundled version (whenever possible) | + | - Support for latest OpenSSL 1.1.x version |
- Any patch that fix a bug, a security issue or a FTBFS issue | - Any patch that fix a bug, a security issue or a FTBFS issue | ||
- | Most of the patches were pulled from the Debian PHP source packages and | + | Most of the patches were pulled from the Debian PHP team git repository and |
- | adjusted when needed, while some other were created to resolve FTBFS issues or | + | modified when needed, while some other were created to resolve FTBFS issues. |
- | adjust configuration. Patches which were not pulled from Debian PHP source | + | Patches which were not pulled from Debian PHP team git repository have the |
- | packages have the `nxw_` prefix in their names. | + | `nxw-` prefix in their names. |
- | ## Available PHP extensions | + | ### PHP extensions |
- | Available PHP extensions are the same that are enabled in PHP versions provided | + | PHP extensions are the same that are provided by PHP versions from the Debian |
- | by Debian/Ubuntu team. However, it must be noted that some of them can have been | + | PHP team. Most are compiled as shared module. |
- | disabled for some PHP versions due to incompatibilities with system libraries | + | |
- | that are too recent. | + | |
- | Most of PHP extensions are compiled as shared module. | + | ### PHP build dependencies (since version 5.0.0) |
- | ## Build dependencies | + | The `php_compiler.pl` script install the build dependencies for you by creating |
+ | a specific Debian dependency package for each PHP version. These packages are | ||
+ | purged after a successfull build. | ||
- | The PHP compiler installs the build dependencies for you. However, if a package | + | ### PHP runtime dependencies (since version 5.0.0) |
- | isn't available, it will go ahead and the PHP configuration process will fail. | + | |
- | ## Parallel Execution (GNU make) | + | The `php_compiler.pl` script install the PHP runtime dependencies for you by |
+ | creating a specific Debian runtime dependency package for each PHP version. | ||
+ | These packages are purged only when you uninstall the plugin. | ||
- | For faster compilation, the parallel execution feature provided by GNU make is | + | ### Build environment (since version 5.0.0) |
- | enabled whenever possible. This feature allows to execute many recipes | + | |
- | simultaneously. By default, the number of parallel jobs is set according the | + | |
- | number of CPU core available on your system. You can still set the value | + | |
- | manually with the `--parallel-jobs` command line option as follow: | + | |
- | ``` | + | Build perations are performed in a chroot environment by default. This allows to |
- | cd /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | setup a clean build environment, and this also avoid to pollute the production |
- | perl php_compiler.pl --parallel-jobs 1 %version% | + | system with PHP build dependencies. |
- | ``` | + | |
- | Here, only one recipe will be run at time. | + | You can switch back to the historical behavior by passing the `--no-chroot` |
+ | option to the `php_compiler.pl` script. | ||
- | See https://www.gnu.org/software/make/manual/html_node/Parallel.html for | + | ### Parallel Execution (GNU make) |
- | further details about this feature. | + | |
+ | For faster compilation, the parallel execution feature provided by GNU make is | ||
+ | enabled. This feature allows to execute many recipes simultaneously. By default, | ||
+ | the number of parallel jobs is set according the number of CPU core available on | ||
+ | your system + 1. You can still set the value manually by passing the | ||
+ | `--parallel-jobs` option to the `php_compiler.pl` script. | ||
- | ## Installation layout | + | See [Parallel Execution](https://www.gnu.org/software/make/manual/html_node/Parallel.html) |
+ | for further details about this feature. | ||
- | First of all, you must note that in all cases, we build the following PHP | + | ### Installation layout |
- | SAPIs: `cli`, `cgi` and `fpm`. This allows switching on other i-MSCP httpd | + | |
- | server implementation without having to rebuild all PHP versions. This is also | + | |
- | needed to build static phpinfo files. Indeed, we always use the PHP FastCGI | + | |
- | binary to build them. | + | |
For all PHP versions provided by the PHP compiler, the following installation | For all PHP versions provided by the PHP compiler, the following installation | ||
layout applies: | layout applies: | ||
- | ### Common to all PHP SAPIs | + | #### Common to all PHP SAPIs |
- Main php.ini file: /opt/phpswitcher/%ymd%/php%version%/etc/php/php.ini | - Main php.ini file: /opt/phpswitcher/%ymd%/php%version%/etc/php/php.ini | ||
- Additional *.ini files: /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d | - Additional *.ini files: /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d | ||
- | ### PHP cli SAPI | + | #### PHP cli SAPI |
- PHP CLI binary: /opt/phpswitcher/%ymd%/php%version%/bin/php | - PHP CLI binary: /opt/phpswitcher/%ymd%/php%version%/bin/php | ||
- | ### PHP cgi SAPI | + | #### PHP cgi SAPI |
- PHP FastCGI binary: /opt/phpswitcher/%ymd%/php%version%/bin/php-cgi | - PHP FastCGI binary: /opt/phpswitcher/%ymd%/php%version%/bin/php-cgi | ||
- User php.ini files: /var/www/fcgi/%domain%/php%version%/php.ini | - User php.ini files: /var/www/fcgi/%domain%/php%version%/php.ini | ||
- | ### PHP fpm SAPI (only when available) | + | #### PHP fpm SAPI |
- PHP-FPM binary: /opt/phpswitcher/%ymd%/php%version%/sbin/psw%version%-fpm | - PHP-FPM binary: /opt/phpswitcher/%ymd%/php%version%/sbin/psw%version%-fpm | ||
- PHP-FPM configuration file: /opt/phpswitcher/%ymd%/php%Version%/etc/php-fpm.conf | - PHP-FPM configuration file: /opt/phpswitcher/%ymd%/php%Version%/etc/php-fpm.conf | ||
- | - PHP-FPM checkconf script: /usr/local/lib/phpswitcher/psw%version%-fpm-checkconf | ||
- PHP-FPM instance pid file: /var/run/phpswitcher/psw%version%-fpm.pid | - PHP-FPM instance pid file: /var/run/phpswitcher/psw%version%-fpm.pid | ||
- PHP-FPM log file: /var/log/phpswitcher/psw%version%-fpm.log | - PHP-FPM log file: /var/log/phpswitcher/psw%version%-fpm.log | ||
Line 215: | Line 191: | ||
- PHP-FPM tmpfile: /etc/tmpfiles.d/psw%version%-fpm.conf | - PHP-FPM tmpfile: /etc/tmpfiles.d/psw%version%-fpm.conf | ||
- | As you can see, we use a specific naming convention for PHP-FPM. This is needed | + | As you can see, there is a specific naming convention for PHP-FPM. This is needed |
- | to avoid conflict with PHP versions that are provided by your distribution. | + | to avoid conflict with packaged PHP versions. |
Note that the `psw` prefix stands for `PhpSwitcher`. | Note that the `psw` prefix stands for `PhpSwitcher`. | ||
- | # PHP configuration | + | #### Static paths (since version 5.0.0) |
- | Before going further it is important to note that it is useless to edit any PHP | + | For convenience, the `php_compiler.pl` script also creates symlinks to the |
- | configuration file located under the `/etc/php%version%` or | + | installation directories of various PHP versions, which allows the sysadmin |
- | `/etc/php/%version%` directories. Indeed, the files located under these | + | to access the PHP binaries always by the same paths (e.g. in CRONTAB(5) files). |
- | directories are only relevant for the PHP versions provided by your | + | |
- | distribution. | + | |
- | For the same reasons, it is useless to try to enable/disable a PHP module using | + | These symlinks are created in the `/opt/phpswitcher/static` directory, either at |
- | the command line tools phpenmod/phpdismod that are provided by your distribution. | + | the installation stage, or at the registration stage. If you do not want these |
- | Those tools only operate on the INI files that are provided by your distribution. | + | symlinks, you can pass the `--no-static-paths` option to the `php_compiler.pl` |
+ | script. | ||
+ | |||
+ | Note that when the symlinks are available, they will be used for registration | ||
+ | process in place of the default paths. | ||
+ | |||
+ | ## Packaged PHP versions (since version 5.0.0) | ||
+ | |||
+ | The `php_compiler.pl` script also make possible to register packaged PHP | ||
+ | versions in the PhpSwitcher plugin. Packaged PHP versions are either those | ||
+ | provided by the Debian PHP team, or the Ondřej Surý repositories. To register | ||
+ | the packaged PHP versions, you need to execute the following command: | ||
+ | |||
+ | ```shell | ||
+ | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl --register --packaged | ||
+ | ``` | ||
+ | |||
+ | When the `--packaged` option is passed-in, the `php_compiler.pl` script will | ||
+ | favor registration of packaged PHP versions rather than compiled ones. In other | ||
+ | words, for a given PHP version, the PHP compiler will fallback to a compiled PHP | ||
+ | version only if there is no packaged PHP version available. | ||
+ | |||
+ | If you only want work with packaged PHP versions, you can also pass the | ||
+ | `--packaged-only` option: | ||
+ | |||
+ | ```shell | ||
+ | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl --register --packaged --packaged-only | ||
+ | ``` | ||
+ | |||
+ | With this option, only the packaged PHP versions will be considered, regardless | ||
+ | of their availalibity. If no packaged PHP version is available, nothing will | ||
+ | happend, that is, no fallback to a compiled PHP version will be made. | ||
+ | |||
+ | You can of course still specify the PHP versions for which you want to operate | ||
+ | on, and you can also change the default directory, where the PHP compiler is | ||
+ | looking for the compiled PHP versions, by passing the `--install-dir` option. | ||
+ | For instance: | ||
+ | |||
+ | ```shell | ||
+ | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl --register --packaged --install-dir /opt/my/install/directory 7.1 7.3 7.4 | ||
+ | ``` | ||
+ | |||
+ | Note that for a packaged PHP version, the plugin backend will skip generation of | ||
+ | most configuration files as those are already provided by the package. You need | ||
+ | also remember that for a packaged PHP version, the FPM service name is | ||
+ | `php%version%-fpm` instead of `psw%version%-fpm`. | ||
+ | |||
+ | Finally, you need keep in mind that for the `php_compiler.pl` script, the | ||
+ | packaged PHP versions are considered only when all requirements are met, that | ||
+ | is, when for a given PHP version, the CGI sapi, FPM sapi, and the PEAR | ||
+ | distribution are all installed on the system. For instance, if you want to | ||
+ | register the PHP 7.3 packaged version, you must first make sure that all | ||
+ | required distribution packages are installed: | ||
+ | |||
+ | ```shell | ||
+ | # apt-get update | ||
+ | # apt-get install php7.3-cli php7.3-cgi php7.3-fpm php-pear | ||
+ | ``` | ||
## PEAR packages | ## PEAR packages | ||
- | Each PHP version comes with its own PEAR distribution that is installed under | + | ### For a compiled PHP version |
- | the `/opt/phpswitcher/%ymd%/php%version%/share/pear` directory. Please don't | + | |
- | try to include PEAR library from another location without knowning what you are | + | Each compiled PHP version comes with its own PEAR distribution which is |
- | doing. Doing this could lead to serious problems. | + | installed under the `/opt/phpswitcher/%ymd%/php%version%/share/pear` directory. |
+ | |||
+ | You shouldn't try to include a PEAR library from another location without | ||
+ | knowing what you are doing because doing this could lead to an unexpected | ||
+ | behavior. | ||
If you want to install additional PEAR packages, you must install them using | If you want to install additional PEAR packages, you must install them using | ||
- | the `pear` command provided by the PHP version for which you want act. For | + | the `pear` command provided by the compiled PHP version for which you want act. |
- | instance: | + | For instance: |
+ | ```shell | ||
+ | # cd /opt/phpswitcher/%ymd%/php%Version%/bin | ||
+ | # ./pear install Net_SMTP | ||
``` | ``` | ||
- | cd /opt/phpswitcher/%ymd%/php%Version%/bin | + | |
- | ./pear install Net_SMTP | + | ### For a packaged PHP version |
+ | |||
+ | For a packaged PHP version, you just need to install the distribution package: | ||
+ | |||
+ | ```shell | ||
+ | # apt-get update | ||
+ | # apt-get install php-net-smtp | ||
+ | ``` | ||
+ | |||
+ | or if there is none, you can process as follows: | ||
+ | |||
+ | ```shell | ||
+ | # /usr/bin/pear install Net_SMTP | ||
``` | ``` | ||
## PHP extensions | ## PHP extensions | ||
- | For convenience, most of PHP extensions are compiled as shared modules. When | + | ### For a compiled PHP version |
- | installing a new PHP version, the PHP compiler create a specific INI file that | + | |
- | enable most of available PHP extensions. By default, this file is located at | + | For convenience, most of PHP extensions are compiled as shared modules. When a |
+ | compiled PHP version is being installed, a specific INI file that enable most of | ||
+ | available PHP extensions is created. By default, this file is located at | ||
`/opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/modules.ini`. | `/opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/modules.ini`. | ||
- | Here, a single INI file is used for ease. This is not like with your | + | Here, a single INI file is involved. This is not like with a packaged PHP |
- | distribution PHP packages where an INI file is created for each PHP extension. | + | version where there is one INI file per extension. |
- | To enable/disable a specific PHP extension, you must just edit the INI file and | + | To enable/disable a specific PHP extension, you must just edit the modules.ini |
- | then, restart the Web server or PHP-FPM instance, depending on the i-MSCP httpd | + | INI file and once done, restart the Web server or PHP-FPM instance, depending on |
- | server implementation in use. | + | the i-MSCP httpd server implementation in use. |
- | ## Pecl extensions | + | ### For a packaged PHP version |
- | If you want install a Pecl extension, you must not use the `pecl` or `phpize` | + | For a packaged PHP version, you can enable/disable the PHP extensions using the |
- | commands that are shipped with your distribution. Instead, you must use the | + | phpenmod/phpdismod command provided by your distribution. |
- | commands that are provided in the directory of the PHP version for which you | + | |
- | want act. | + | |
- | For instance, if you want install the `ImageMagick` Pecl extension you must do | + | ## PECL extensions |
- | as follow: | + | |
- | ``` | + | ### For a compiled PHP version |
- | apt-get update && apt-get -y install libmagickwand-dev imagemagick | + | |
- | cd /opt/phpswitcher/%ymd%/php%version%/bin | + | If you want to install a PECL extension, you must not invoke the `pecl` or |
- | ./pecl install imagick | + | `phpize` commands that are provided by your distribution. Instead, you must |
- | echo 'extension = imagick.so' >> /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/modules.ini | + | invoke those that are provided by the compiled PHP version for which you want |
+ | act. | ||
+ | |||
+ | For instance, if you want to install the `Imagick` PECL extension you can | ||
+ | process as follows: | ||
+ | |||
+ | ```shell | ||
+ | # apt-get update | ||
+ | # apt-get -y install libmagickwand-dev imagemagick | ||
+ | # /opt/phpswitcher/%ymd%/php%version%/bin/pecl install imagick | ||
+ | # echo 'extension = imagick.so' > /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/imagick.ini | ||
``` | ``` | ||
- | then, you must restart the Web server or PHP-FPM instance, depending on the | + | Finally, you must restart the Web server or PHP-FPM instance, depending on the |
i-MSCP httpd server implementation in use. | i-MSCP httpd server implementation in use. | ||
- | ## APCu extension | + | ### For a packaged PHP version |
- | APCu is a userland cache stripped of opcode caching that comes in replacement | + | For a packaged PHP version, you just need to install the distribution package: |
- | of the APC extension. It is a good complement for PHP versions ≥ PHP 5.5 that | + | |
- | already provide an opcode cache through the OPcache extension. | + | |
- | If you want to install this extension for one of your PHP version, you can do | + | ```shell |
- | as follow | + | # apt-get update |
+ | # apt-get install php%version%-imagick | ||
+ | ``` | ||
- | ``` | + | or if there is none, you can process as follows: |
- | cd /opt/phpswitcher/%ymd%/php%version%/bin | + | |
- | ./pecl install channel://pecl.php.net/apcu-%apcu_version% | + | ```shell |
- | PHP_EXT_DIR=$(/opt/phpswitcher/%ymd%/php%version%/bin/php-config --extension-dir) | + | # apt-get update |
- | echo "extension = $PHP_EXT_DIR/apcu.so" > /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/02_apcu.ini | + | # apt-get -y install php%version%-dev libmagickwand-dev imagemagick |
+ | # update-alternatives --set php /usr/bin/php%version% | ||
+ | # update-alternatives --set phpize /usr/bin/phpize%version% | ||
+ | # update-alternatives --set php-config /usr/bin/php-config%version% | ||
+ | # pecl install imagick | ||
+ | # echo 'extension = imagick.so' > /etc/php/%version%/mods-available/imagick.ini | ||
+ | # phpenmod -v %version% imagick | ||
``` | ``` | ||
- | then, you must restart the Web server or PHP-FPM instance, depending on the | + | Finally, you must restart the Web server, or PHP-FPM instance, depending on the |
i-MSCP httpd server implementation in use. | i-MSCP httpd server implementation in use. | ||
- | Note that the APcu version to install depends on your PHP version | + | You can uninstall the PECL extension by following the same procedure, replacing |
+ | the pecl `install` command by the pecl `uninstall` command. However, you'll have | ||
+ | to disable the module first. For instance: | ||
- | - 4.0.x for PHP 5.5.x and 5.6.x | + | ```shell |
- | - 5.1.x for PHP 7.0.x and PHP 7.1.x | + | # update-alternatives --set php /usr/bin/php%version% |
+ | # update-alternatives --set phpize /usr/bin/phpize%version% | ||
+ | # update-alternatives --set php-config /usr/bin/php-config%version% | ||
+ | # phpdismod -v %version% imagick | ||
+ | # rm /etc/php/%version%/mods-available/imagick.ini | ||
+ | # pecl uninstall imagick | ||
+ | ``` | ||
+ | |||
+ | **WARNING:** In both cases, you must not forget to reset the various | ||
+ | alternatives to their previous values, as required by i-MSCP core: | ||
+ | |||
+ | ```shell | ||
+ | # PHP_VERSION=$(egrep '^PHP_VERSION' /etc/imscp/php/php.data | sed -e 's/PHP_VERSION\s\+=\s\+\(.*\)/\1/g') | ||
+ | # update-alternatives --set php /usr/bin/php"$PHP_VERSION" | ||
+ | # update-alternatives --set phpize /usr/bin/phpize"$PHP_VERSION" | ||
+ | # update-alternatives --set php-config /usr/bin/php-config"$PHP_VERSION" | ||
+ | ``` | ||
## IonCube loader | ## IonCube loader | ||
- | If you want to install this extension for one of your PHP version, you can do | + | If you want to install this extension for one of your PHP version, you can |
- | as follow (example for the x86-64 version): | + | process as follows (example for the x86-64 architecture): |
+ | ### For a compiled PHP version | ||
+ | |||
+ | ```shell | ||
+ | # cd /usr/local/src | ||
+ | # wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz | ||
+ | # tar -xzf ioncube_loaders_lin_x86-64.tar.gz | ||
+ | # cd ioncube | ||
+ | # PHP_EXT_DIR=$(/opt/phpswitcher/%ymd%/php%version%/bin/php-config --extension-dir) | ||
+ | # cp ioncube_loader_lin_%version%.so $PHP_EXT_DIR/ioncube.so | ||
+ | # echo "zend_extension = $PHP_EXT_DIR/ioncube.so" > /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/01_ioncube.ini | ||
``` | ``` | ||
- | cd /usr/local/src | + | |
- | wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz | + | Finally, you must restart the Web server or PHP-FPM instance, depending on the |
- | tar -xzf ioncube_loaders_lin_x86-64.tar.gz | + | i-MSCP httpd server implementation in use. |
- | cd ioncube | + | |
- | PHP_EXT_DIR=$(/opt/phpswitcher/%ymd%/php%version%/bin/php-config --extension-dir) | + | ### For a packaged PHP version |
- | cp ioncube_loader_lin_%version%.so $PHP_EXT_DIR/ioncube.so | + | |
- | echo "zend_extension = $PHP_EXT_DIR/ioncube.so" > /opt/phpswitcher/%ymd%/php%version%/etc/php/conf.d/01_ioncube.ini | + | ```shell |
+ | # apt-get update | ||
+ | # apt-get install php%version%-dev | ||
+ | # cd /usr/local/src | ||
+ | # wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz | ||
+ | # tar -xzf ioncube_loaders_lin_x86-64.tar.gz | ||
+ | # cd ioncube | ||
+ | # PHP_EXT_DIR=$(php-config%version% --extension-dir) | ||
+ | # cp ioncube_loader_lin_%version%.so "$PHP_EXT_DIR"/ioncube.so | ||
+ | # echo -e "; priority=01\nzend_extension = $PHP_EXT_DIR"/ioncube.so" >> /etc/php/%version%/mods-available/ioncube.ini | ||
+ | # phpenmod -v %version% ioncube | ||
``` | ``` | ||
- | then, you must restart the Web server or PHP-FPM instance, depending on the | + | Finally, you must restart the Web server or PHP-FPM instance, depending on the |
i-MSCP httpd server implementation in use. | i-MSCP httpd server implementation in use. | ||
- | ## phpinfo files | + | ## PHP configuration information (phpinfo) |
- | For each PHP version that is setup through the PhpSwitcher administration | + | This feature allows the customers to access the configuration information of |
- | interface (see below), a static phpinfo file is generated, which allows your | + | various PHP versions through their own PhpSwitcher interface. This feature can |
- | customers to get PHP information via their own PhpSwitcher interface. This | + | be disabled by editing the plugin configuration file, and by triggering a plugin |
- | feature, if not desired, can be disabled by editing the plugin configuration | + | list update through the plugin management interface. |
- | file and by triggering a plugin list update through the plugin management | + | |
- | interface. | + | |
- | Be aware that because the phpinfo files are static, you must re-generate them | + | ### With the i-MSCP FPM httpd server implementation |
- | each time you made a configuration change for a specific PHP version (e.g. when | + | |
- | you enable or disable a PHP/Pecl extension). This task can be done through the | + | |
- | PhpSwitcher administration interface. Be also aware that because those files | + | |
- | are static, some information such as memory could not matches with those that | + | |
- | you have set for your customers (e.g. using the PHP editor provided by i-MSCP). | + | |
- | # Setup of new PHP versions | + | The plugin make use of the default `www.conf` FPM pool of each PHP version to |
+ | serve the PHP configuration information at runtime. | ||
- | Once you have installed new PHP versions, you need to setup them into the | + | ### With the i-MSCP Fcgid httpd server implementation |
- | PhpSwitcher plugin to make them available for your customers. | + | |
- | ## Automatic setup | + | The plugin generate a static PHP info file for each PHP version. Because the |
+ | information are static, you must not forget to re-generate them each time you do | ||
+ | a configuration change for a specific PHP version (e.g. when you enable or | ||
+ | disable a PHP/PECL extension). This task can be done through the PhpSwitcher | ||
+ | administration interface, for each PHP version. | ||
- | Simply execute the following command: | + | ## Registration of new PHP versions |
- | ``` | + | You can register new PHP version either using the `php_compiler.pl` script |
- | cd perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler | + | (recommended), or manually through the PhpSwitcher administration interface. |
- | perl php_compiler.pl --auto-setup --install-dir %installdir% | + | |
+ | ### Registration through the `php_compiler.pl` script | ||
+ | |||
+ | To register a PHP version, you need to execute the following command: | ||
+ | |||
+ | ```shell | ||
+ | # perl /var/www/imscp/gui/plugins/PhpSwitcher/PhpCompiler/php_compiler.pl --register --install-dir %installdir% | ||
``` | ``` | ||
- | Note that doing this is only required if you do not have used the | + | See the previous documentation sections for all possible options, notably those |
- | `--auto-setup` command line option while compiling your PHP versions. | + | which apply to packaged PHP versions. |
- | ## Manual setup | + | ### Registration through the PhpSwitcher administration interface |
1. Login into the panel as administrator and go to the PhpSwitcher | 1. Login into the panel as administrator and go to the PhpSwitcher | ||
administration interface (settings section) | administration interface (settings section) | ||
- | 2. Setup your new PHP versions as follow: | + | 2. Setup your new PHP versions as follows: |
- | ### Common settings (Required) | + | #### Common settings (Required) |
- Path to PEAR directory: /opt/phpswitcher/%ymd%/php%version%/share/pear | - Path to PEAR directory: /opt/phpswitcher/%ymd%/php%version%/share/pear | ||
- | ### PHP FastCGI settings (Required) | + | #### PHP FastCGI settings (Required) |
- Path to binary: /opt/phpswitcher/%ymd%/php%version%/bin/php-cgi | - Path to binary: /opt/phpswitcher/%ymd%/php%version%/bin/php-cgi | ||
- | ### PHP-FPM settings (Only required if you use the PHP-FPM httpd server implementation) | + | #### PHP-FPM settings (Required) |
- Path to binary: /opt/phpswitcher/%ymd%/php%version%/sbin/psw%version%-fpm | - Path to binary: /opt/phpswitcher/%ymd%/php%version%/sbin/psw%version%-fpm | ||
- Path to configuration file: /opt/phpswitcher/%ymd%/php%version%/etc/php-fpm.conf | - Path to configuration file: /opt/phpswitcher/%ymd%/php%version%/etc/php-fpm.conf | ||
- Path to pool directory: /opt/phpswitcher/%ymd%/php%version%/etc/php-fpm.d | - Path to pool directory: /opt/phpswitcher/%ymd%/php%version%/etc/php-fpm.d | ||
- | # Plugin translation | + | ## Plugin translation |
You can translate this plugin using a gettext translation editor such as | You can translate this plugin using a gettext translation editor such as | ||
Line 385: | Line 491: | ||
file. Be aware that your file must be UTF-8, else, it won't be accepted. | file. Be aware that your file must be UTF-8, else, it won't be accepted. | ||
- | # License | + | ## License |
``` | ``` | ||
i-MSCP PhpSwitcher plugin | i-MSCP PhpSwitcher plugin | ||
- | © 2014-2017 Laurent Declercq <[email protected]> | + | © 2014-2019 Laurent Declercq <[email protected]> |
i-MSCP License <https://www.i-mscp.net/license-agreement.html> | i-MSCP License <https://www.i-mscp.net/license-agreement.html> | ||
``` | ``` | ||
- | |||
- | See the LICENSE file inside the archive for further details. | ||
</markdown> | </markdown> |