2020-02-02 16:17:49 +01:00
![Test extensions ](https://github.com/mlocati/docker-php-extension-installer/workflows/Test%20extensions/badge.svg )
2018-04-12 09:25:43 +02:00
2018-04-11 17:39:10 +02:00
# Easy installation of PHP extensions in official PHP Docker images
This repository contains a script that can be used to easily install a PHP extension inside the [official PHP Docker images ](https://hub.docker.com/_/php/ ).
2020-01-08 10:09:44 +01:00
The script will install all the required APT/APK packages; at the end of the script execution, the no-more needed packages will be removed so that the image will be much smaller.
2020-01-31 11:09:13 +01:00
Supported docker images are all the Alpine/Debian versions, except for PHP 5.5 where we only support Debian 8 (jessie) (that is, `php:5.5` , `php:5.5-apache` , `php:5.5-cli` , `php:5.5-fpm` , `php:5.5-zts` )
2018-04-11 17:39:10 +02:00
## Usage
2020-01-08 10:09:44 +01:00
You have two ways to use this script within your `Dockerfile` s: you can download the script on the fly, or you can grab it from the [`mlocati/php-extension-installer` Docker Hub image ](https://hub.docker.com/r/mlocati/php-extension-installer ).
With the first method you are sure you'll always get the very latest version of the script, with the second method the process is faster since you'll use a local image.
2018-04-11 17:39:10 +02:00
2020-01-08 10:09:44 +01:00
For example, here are two `Dockerfile` s that install the GD and xdebug PHP extensions:
### Downloading the script on the fly
```Dockerfile
2018-04-11 17:39:10 +02:00
FROM php:7.2-cli
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
2018-04-12 14:37:58 +02:00
RUN chmod uga+x /usr/local/bin/install-php-extensions & & sync & & \
2018-04-11 17:45:25 +02:00
install-php-extensions gd xdebug
2018-04-11 17:39:10 +02:00
```
2020-01-08 10:09:44 +01:00
### Copying the script from a Docker image
2019-10-09 17:11:51 +02:00
2020-01-08 10:09:44 +01:00
```Dockerfile
2019-10-09 17:11:51 +02:00
FROM php:7.2-cli
2019-10-10 08:49:44 +02:00
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
2019-10-09 17:11:51 +02:00
RUN install-php-extensions gd xdebug
```
2018-04-11 17:39:10 +02:00
## Supported PHP extensions
<!-- START OF EXTENSIONS TABLE -->
<!-- ########################################################### -->
<!-- # # -->
<!-- # DO NOT EDIT THIS TABLE: IT IS GENERATED AUTOMATICALLY # -->
<!-- # # -->
<!-- # EDIT THE data/supported - extensions FILE INSTEAD # -->
<!-- # # -->
<!-- ########################################################### -->
2020-01-31 16:30:08 +01:00
| Extension | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| amqp | V | V | V | V | V | V | V |
| apcu | V | V | V | V | V | V | V |
| bcmath | V | V | V | V | V | V | V |
| bz2 | V | V | V | V | V | V | V |
| calendar | V | V | V | V | V | V | V |
| cmark | | | V | V | V | V | V |
| dba | V | V | V | V | V | V | V |
| enchant | V | V | V | V | V | V | V |
| exif | V | V | V | V | V | V | V |
| gd | V | V | V | V | V | V | V |
| gettext | V | V | V | V | V | V | V |
2020-02-02 21:04:21 +01:00
| gmagick | V | V | V | V | V | V | V |
2020-01-31 16:53:38 +01:00
| gmp | V | V | V | V | V | V | V |
2020-01-31 16:30:08 +01:00
| grpc | | V | V | V | V | V | V |
| http | | V | V | V | V | V | V |
| igbinary | | V | V | V | V | V | V |
| imagick | | V | V | V | V | V | V |
| imap | | V | V | V | V | V | V |
| interbase | | V | V | V | V | V | |
| intl | | V | V | V | V | V | V |
| ldap | | V | V | V | V | V | V |
| mailparse | | V | V | V | V | V | V |
| mcrypt | | V | V | V | V | V | V |
| memcache | | V | V | V | V | V | V |
| memcached | | V | V | V | V | V | V |
| mongo | | V | | | | | |
| mongodb | | V | V | V | V | V | V |
| msgpack | | V | V | V | V | V | V |
| mssql | | V | | | | | |
| mysql | | V | | | | | |
| mysqli | | V | V | V | V | V | V |
| odbc | | V | V | V | V | V | V |
| opcache | | V | V | V | V | V | V |
| opencensus | | | V | V | V | V | V |
| parallel | | | | V | V | V | V |
| pcntl | | V | V | V | V | V | V |
| pcov | | | V | V | V | V | V |
| pdo_dblib | | V | V | V | V | V | V |
| pdo_firebird | | V | V | V | V | V | V |
| pdo_mysql | | V | V | V | V | V | V |
| pdo_odbc | | V | V | V | V | V | V |
| pdo_pgsql | | V | V | V | V | V | V |
| pdo_sqlsrv | | | V | V | V | V | V |
| pgsql | | V | V | V | V | V | V |
| propro | | V | V | V | V | V | V |
| protobuf | | V | V | V | V | V | V |
| pspell | | V | V | V | V | V | V |
| pthreads | | V | V | | | | |
| raphf | | V | V | V | V | V | V |
| rdkafka | | V | V | V | V | V | V |
| recode | | V | V | V | V | V | |
| redis | | V | V | V | V | V | V |
| shmop | | V | V | V | V | V | V |
| snmp | | V | V | V | V | V | V |
| soap | | V | V | V | V | V | V |
| sockets | | V | V | V | V | V | V |
| solr | | V | V | V | V | V | V |
| sqlsrv | | | V | V | V | V | V |
| ssh2 | | V | V | V | V | V | V |
| sybase_ct | | V | | | | | |
| sysvmsg | | V | V | V | V | V | V |
| sysvsem | | V | V | V | V | V | V |
| sysvshm | | V | V | V | V | V | V |
| tidy | | V | V | V | V | V | V |
| timezonedb | | V | V | V | V | V | V |
| uopz | | V | V | V | V | V | V |
| uuid | | V | V | V | V | V | V |
| wddx | | V | V | V | V | V | |
| xdebug | | V | V | V | V | V | V |
| xmlrpc | | V | V | V | V | V | V |
| xsl | | V | V | V | V | V | V |
| yaml | | V | V | V | V | V | V |
2020-01-31 16:53:38 +01:00
| zip | V | V | V | V | V | V | V |
2019-12-17 10:26:35 +01:00
2020-01-07 11:46:38 +01:00
*Number of supported extensions: 73*
2018-04-11 17:39:10 +02:00
<!-- END OF EXTENSIONS TABLE -->
2018-04-12 09:50:14 +02:00
PS: the pre-installed PHP extensions are excluded from this list.
You can list them with the following command (change `php:7.2-cli` to reflect the PHP version you are interested in):
```sh
docker run --rm -it php:7.2-cli php -m
```
2018-04-11 17:39:10 +02:00
## Special requirements
Some extension has special requirements:
<!-- START OF SPECIAL REQUIREMENTS -->
<!-- ########################################################### -->
<!-- # # -->
<!-- # DO NOT EDIT THIS TABLE: IT IS GENERATED AUTOMATICALLY # -->
<!-- # # -->
<!-- # EDIT THE data/special - requirements FILE INSTEAD # -->
<!-- # # -->
<!-- ########################################################### -->
| Extension | Requirements |
|:---:|:---:|
2019-10-11 08:23:49 +02:00
| parallel | Requires images with PHP compiled with thread-safety enabled (`zts`). |
2018-04-11 17:39:10 +02:00
| pthreads | Requires images with PHP compiled with thread-safety enabled (`zts`). |
<!-- END OF SPECIAL REQUIREMENTS -->
2018-04-12 11:58:21 +02:00
## How to contribute
2019-12-20 18:26:26 +01:00
### Formatting code
Before submitting any pull request, be sure to execute the `lint` script in the `scripts` directory (or `lint.bat` on Windows).
2019-12-17 10:33:20 +01:00
### Adding support to a new PHP extension?
2019-12-11 12:57:53 +01:00
2019-12-17 10:33:20 +01:00
1. change the `install-php-extensions` script
2. update the `data/supported-extensions` file, adding a new line with the handle of the extension and the list of supported PHP versions
3. if the extension requires ZTS images:
add a new line to the `data/special-requirements` file, with the extension handle followed by a space and `zts`
2019-12-17 11:21:01 +01:00
See [this pull request ](https://github.com/mlocati/docker-php-extension-installer/pull/60 ) for an example.
2019-12-17 10:33:20 +01:00
### Changing the supported PHP versions for an already supported PHP extension?
1. change the `install-php-extensions` script
2019-12-18 16:45:20 +01:00
2. update the `data/supported-extensions` file, adding the new PHP version to the existing line corresponding to the updated extension
2019-12-17 11:21:01 +01:00
See [this pull request ](https://github.com/mlocati/docker-php-extension-installer/pull/62 ) for an example.
2019-12-17 10:33:20 +01:00
### Improving code for an already supported extension?
If you change some code that affects one or more extensions, please add a line with `Test: extension1, extension2` to the message of one of the pull request commits.
That way, the test jobs will check the extension even if you don't touch the `data/supported-extensions` file.
Here's an example of a commit message:
```
Improve the GD and ZIP extensions
Test: gd, zip
```
2019-12-18 16:45:20 +01:00
Tests only check the installation of a single PHP extension at a time.
If you want to test installing more PHP extensions at the same time, use a commit message like this:
```
Improve the GD and ZIP extensions
Test: gd+zip
```
2019-12-17 10:33:20 +01:00
If your pull request contains multiple commits, we'll check the "Test:" message of every commit.
If you want to stop parsing next commits, add `-STOP-` in the "Test:" line, for example:
```
Improve the GD and ZIP extensions
Test: gd, zip, -STOP-
```
2019-12-10 08:55:09 +01:00
2019-12-17 11:21:01 +01:00
See [this pull request ](https://github.com/mlocati/docker-php-extension-installer/pull/43 ) for an example.
2019-12-10 08:55:09 +01:00
## Do you want to really say thank you?
You can offer me a [monthly coffee ](https://github.com/sponsors/mlocati ) or a [one-time coffee ](https://paypal.me/mlocati ) :wink: