├── .dockerignore ├── .editorconfig ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── build.yml │ ├── build_manual.yml │ └── build_preview.yml ├── 7.4.Dockerfile ├── 8.0.Dockerfile ├── 8.1.Dockerfile ├── 8.2.Dockerfile ├── 8.3.Dockerfile ├── 8.4.Dockerfile ├── LICENSE ├── README.md ├── docker-pecl-ext-install ├── docker-php-ext-disable ├── docker-php-ext-install-if ├── docker-php-ext-remove └── ext.php /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .github 3 | .gitignore 4 | README.md 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | ; http://editorconfig.org 2 | ; 3 | ; Sublime: https://github.com/sindresorhus/editorconfig-sublime 4 | ; Phpstorm: https://plugins.jetbrains.com/plugin/7294-editorconfig 5 | 6 | root = true 7 | 8 | [*] 9 | indent_style = space 10 | indent_size = 2 11 | end_of_line = lf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [{*.md,*.php}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: adhocore 2 | custom: ['https://paypal.me/ji10'] 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: docker 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "22:00" 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - 'main' 8 | 9 | jobs: 10 | docker: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v3 15 | - name: Set up QEMU 16 | uses: docker/setup-qemu-action@v2 17 | - name: Set up Docker Buildx 18 | uses: docker/setup-buildx-action@v2 19 | - name: Login to DockerHub 20 | uses: docker/login-action@v2 21 | with: 22 | username: ${{ secrets.DOCKERHUB_USERNAME }} 23 | password: ${{ secrets.DOCKERHUB_TOKEN }} 24 | - name: "Docker Pull" 25 | run: | 26 | docker pull adhocore/phpfpm:8.0 || true 27 | docker pull adhocore/phpfpm:8.1 || true 28 | docker pull adhocore/phpfpm:8.2 || true 29 | docker pull adhocore/phpfpm:8.3 || true 30 | docker pull adhocore/phpfpm:8.4 || true 31 | 32 | - name: "[8.3] Build and push" 33 | id: docker_build_83 34 | uses: docker/build-push-action@v4 35 | with: 36 | push: true 37 | file: 8.3.Dockerfile 38 | tags: adhocore/phpfpm:8.3,adhocore/phpfpm:latest 39 | platforms: linux/amd64,linux/arm64 40 | 41 | - name: "[8.2] Build and push" 42 | id: docker_build_82 43 | uses: docker/build-push-action@v4 44 | with: 45 | push: true 46 | file: 8.2.Dockerfile 47 | tags: adhocore/phpfpm:8.2 48 | platforms: linux/amd64,linux/arm64 49 | 50 | - name: "[8.1] Build and push" 51 | id: docker_build_81 52 | uses: docker/build-push-action@v4 53 | with: 54 | push: true 55 | file: 8.1.Dockerfile 56 | tags: adhocore/phpfpm:8.1 57 | platforms: linux/amd64,linux/arm64 58 | 59 | - name: "[8.0] Build and push" 60 | id: docker_build_80 61 | uses: docker/build-push-action@v4 62 | with: 63 | push: true 64 | file: 8.0.Dockerfile 65 | tags: adhocore/phpfpm:8.0 66 | platforms: linux/amd64,linux/arm64 67 | 68 | - name: "[8.4] Build and push" 69 | id: docker_build_84 70 | uses: docker/build-push-action@v4 71 | with: 72 | push: true 73 | file: 8.4.Dockerfile 74 | tags: adhocore/phpfpm:8.4,adhocore/phpfpm:latest 75 | platforms: linux/amd64,linux/arm64 76 | -------------------------------------------------------------------------------- /.github/workflows/build_manual.yml: -------------------------------------------------------------------------------- 1 | name: build_manual 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | docker: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v3 12 | - name: Set up QEMU 13 | uses: docker/setup-qemu-action@v2 14 | - name: Set up Docker Buildx 15 | uses: docker/setup-buildx-action@v2 16 | - name: Login to DockerHub 17 | uses: docker/login-action@v2 18 | with: 19 | username: ${{ secrets.DOCKERHUB_USERNAME }} 20 | password: ${{ secrets.DOCKERHUB_TOKEN }} 21 | - name: "Docker Pull" 22 | run: | 23 | docker pull adhocore/phpfpm:7.4 || true 24 | 25 | - name: "[7.4] Build and push" 26 | id: docker_build_74 27 | uses: docker/build-push-action@v4 28 | with: 29 | push: true 30 | file: 7.4.Dockerfile 31 | tags: adhocore/phpfpm:7.4 32 | platforms: linux/amd64,linux/arm64 33 | -------------------------------------------------------------------------------- /.github/workflows/build_preview.yml: -------------------------------------------------------------------------------- 1 | name: build_preview 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | docker: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v3 12 | - name: Set up QEMU 13 | uses: docker/setup-qemu-action@v2 14 | - name: Set up Docker Buildx 15 | uses: docker/setup-buildx-action@v2 16 | - name: Login to DockerHub 17 | uses: docker/login-action@v2 18 | with: 19 | username: ${{ secrets.DOCKERHUB_USERNAME }} 20 | password: ${{ secrets.DOCKERHUB_TOKEN }} 21 | 22 | - name: "[8.4] Build and push" 23 | id: docker_build_84 24 | uses: docker/build-push-action@v4 25 | with: 26 | push: true 27 | file: 8.3.Dockerfile 28 | tags: adhocore/phpfpm:8.4,adhocore/phpfpm:8.4 29 | platforms: linux/amd64,linux/arm64 30 | -------------------------------------------------------------------------------- /7.4.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4.33-fpm-alpine3.16 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | XHPROF_VERSION=5.0.1\ 7 | ZEPHIR_VERSION=1.3.3 \ 8 | PHALCON_VERSION=4.0.0 \ 9 | SWOOLE_VERSION=4.6.7 \ 10 | SWOOLE_ASYNC_VERSION=4.5.5 \ 11 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 12 | PECL_EXTENSIONS="apcu ast ds ev hrtime igbinary imagick lzf lua mongodb memcached msgpack oauth pcov psr rdkafka redis \ 13 | simdjson ssh2-1.2 uuid xdebug-3.1.6 xlswriter yaf yaml" \ 14 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql pdo_pgsql \ 15 | soap sockets sysvshm sysvmsg sysvsem tidy zip" 16 | 17 | # docker-* 18 | COPY docker-* /usr/local/bin/ 19 | 20 | # copy from existing 21 | COPY --from=adhocore/phpfpm:7.4 /usr/local/lib/php/extensions/no-debug-non-zts-20190902/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902/ 22 | COPY --from=adhocore/phpfpm:7.4 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 23 | 24 | # ext 25 | COPY ext.php /ext.php 26 | 27 | RUN \ 28 | # deps 29 | apk add -U --no-cache --virtual temp \ 30 | # dev deps 31 | autoconf g++ file re2c make zlib-dev libtool pcre-dev libxml2-dev bzip2-dev libzip-dev \ 32 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 33 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev \ 34 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 35 | # prod deps 36 | && apk add --no-cache icu gettext gmp gnu-libiconv grpc imagemagick libjpeg libzip libbz2 libxml2-utils openldap-back-mdb openldap yaml \ 37 | libpq tidyhtml imap-dev libmemcached libssh2 libevent libev librdkafka linux-headers lua zlib \ 38 | # 39 | # php extensions 40 | && docker-php-source extract \ 41 | && cd /usr/local/lib/php/extensions/no-debug-non-zts-20190902 && rm -f intl.so mongodb.so && cd - \ 42 | && cd /usr/local/etc/php/conf.d && rm -f *-intl.ini *-mongodb.ini && cd - \ 43 | && pecl channel-update pecl.php.net \ 44 | && docker-pecl-ext-install $PECL_EXTENSIONS \ 45 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 46 | # zephir_parser 47 | # && { php -m | grep zephir_parser || (curl -sSLo zephir_parser.tar.gz https://github.com/phalcon/php-zephir-parser/archive/v$ZEPHIR_VERSION.tar.gz \ 48 | # && tar xzf zephir_parser.tar.gz \ 49 | # && rm -f zephir_parser.tar.gz \ 50 | # && mv php-zephir-parser-$ZEPHIR_VERSION zephir_parser); } \ 51 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 52 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 53 | && cd /usr/local/etc/php/conf.d/ \ 54 | && { mv docker-php-ext-event.ini docker-php-ext-zevent.ini || true; } \ 55 | && { pecl clear-cache || true; } \ 56 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 57 | && docker-php-source delete \ 58 | # 59 | # tideways_xhprof 60 | && { php -m | grep tideways_xhprof || (curl -sSLo /tmp/xhprof.tar.gz https://github.com/tideways/php-xhprof-extension/archive/v$XHPROF_VERSION.tar.gz \ 61 | && cd /tmp/ && tar xzf xhprof.tar.gz && cd php-xhprof-extension-$XHPROF_VERSION \ 62 | && phpize && ./configure \ 63 | && make -j "$(nproc)" && make install \ 64 | && docker-php-ext-enable tideways_xhprof); } \ 65 | # 66 | # composer 67 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer2 \ 68 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer \ 69 | # && composer global require hirak/prestissimo \ 70 | # 71 | # cleanup 72 | && apk del temp \ 73 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 74 | && php -f /ext.php 75 | -------------------------------------------------------------------------------- /8.0.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.0.30-fpm-alpine3.16 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 7 | PECL_EXTENSIONS_FUTURE="ev imagick ssh2-1.3.1 xlswriter yaf" \ 8 | PECL_EXTENSIONS="apcu ast ds igbinary lzf memcached mongodb msgpack oauth pcov psr redis rdkafka simdjson uuid xdebug xhprof yaml" \ 9 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql pdo_pgsql \ 10 | pspell shmop soap sockets sysvshm sysvmsg sysvsem tidy xsl zip" 11 | 12 | # docker-* 13 | COPY docker-* /usr/local/bin/ 14 | 15 | # copy from existing 16 | COPY --from=adhocore/phpfpm:8.0 /usr/local/lib/php/extensions/no-debug-non-zts-20200930/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ 17 | COPY --from=adhocore/phpfpm:8.0 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 18 | 19 | # ext 20 | COPY ext.php /ext.php 21 | 22 | RUN \ 23 | # deps 24 | apk add -U --no-cache --virtual temp \ 25 | # dev deps 26 | autoconf g++ file re2c make zlib-dev libtool aspell-dev pcre-dev libxml2-dev bzip2-dev libzip-dev \ 27 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 28 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev libxslt-dev \ 29 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 30 | # prod deps 31 | && apk add --no-cache aspell gettext gmp gnu-libiconv grpc \ 32 | icu imagemagick libjpeg imap-dev libzip libbz2 libxml2-utils libpq \ 33 | libmemcached libssh2 libevent libev librdkafka libxslt \ 34 | linux-headers lua openldap openldap-back-mdb tidyhtml yaml zlib \ 35 | # 36 | # php extensions 37 | && docker-php-source extract \ 38 | && docker-php-ext-remove intl || true \ 39 | && pecl channel-update pecl.php.net \ 40 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 41 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 42 | && docker-pecl-ext-install $PECL_EXTENSIONS $PECL_EXTENSIONS_FUTURE \ 43 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS $PECL_EXTENSIONS_FUTURE | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 44 | && { pecl clear-cache || true; } \ 45 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 46 | && docker-php-source delete \ 47 | # 48 | # composer 49 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer2 \ 50 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer \ 51 | # 52 | # cleanup 53 | && apk del temp \ 54 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 55 | && php -f /ext.php 56 | -------------------------------------------------------------------------------- /8.1.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.1.31-fpm-alpine3.21 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 7 | PECL_EXTENSIONS_FUTURE="imagick ssh2-1.3.1 xlswriter" \ 8 | PECL_EXTENSIONS="apcu ast ds ev igbinary lzf memcached mongodb msgpack oauth pcov psr redis rdkafka simdjson uuid xdebug xhprof yaf yaml" \ 9 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql pdo_pgsql \ 10 | pspell shmop soap sockets sysvshm sysvmsg sysvsem tidy xsl zip" 11 | 12 | # docker-* 13 | COPY docker-* /usr/local/bin/ 14 | 15 | # copy from existing 16 | COPY --from=adhocore/phpfpm:8.1 /usr/local/lib/php/extensions/no-debug-non-zts-20210902/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20210902/ 17 | COPY --from=adhocore/phpfpm:8.1 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 18 | 19 | # ext 20 | COPY ext.php /ext.php 21 | 22 | RUN \ 23 | # deps 24 | apk add -U --no-cache --virtual temp \ 25 | # dev deps 26 | autoconf g++ file re2c make zlib-dev libtool aspell-dev pcre-dev libxml2-dev bzip2-dev libzip-dev \ 27 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 28 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev libxslt-dev \ 29 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 30 | # prod deps 31 | && apk add --no-cache aspell gettext gmp gnu-libiconv grpc \ 32 | icu imagemagick libjpeg imap-dev libzip libbz2 librdkafka libxml2-utils libpq \ 33 | libmemcached libssh2 libevent libev libxslt linux-headers lua openldap \ 34 | openldap-back-mdb tidyhtml yaml zlib \ 35 | # 36 | # php extensions 37 | && docker-php-source extract \ 38 | && docker-php-ext-remove intl || true \ 39 | && pecl channel-update pecl.php.net \ 40 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 41 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 42 | && docker-pecl-ext-install $PECL_EXTENSIONS $PECL_EXTENSIONS_FUTURE \ 43 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS $PECL_EXTENSIONS_FUTURE | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 44 | && { pecl clear-cache || true; } \ 45 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 46 | && docker-php-source delete \ 47 | # 48 | # composer 49 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 50 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer1 \ 51 | # 52 | # cleanup 53 | && apk del temp \ 54 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 55 | && php -f /ext.php 56 | -------------------------------------------------------------------------------- /8.2.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.2.26-fpm-alpine3.21 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 7 | PECL_EXTENSIONS="apcu ast ds ev igbinary imagick lzf memcached mongodb msgpack oauth pcov \ 8 | psr redis rdkafka simdjson ssh2-1.3.1 uuid xdebug xhprof xlswriter yaml" \ 9 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql \ 10 | pdo_pgsql pspell shmop soap sysvshm sysvmsg sysvsem tidy xsl zip" \ 11 | PECL_EXTENSIONS_FUTURE="grpc yaf" \ 12 | PHP_EXTENSIONS_FUTURE="intl sockets" 13 | 14 | # docker-* 15 | COPY docker-* /usr/local/bin/ 16 | 17 | # copy from existing 18 | COPY --from=adhocore/phpfpm:8.2 /usr/local/lib/php/extensions/no-debug-non-zts-20220829/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ 19 | COPY --from=adhocore/phpfpm:8.2 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 20 | 21 | # ext 22 | COPY ext.php /ext.php 23 | 24 | RUN \ 25 | # deps 26 | apk add -U --no-cache --virtual temp \ 27 | # dev deps 28 | autoconf g++ file re2c make zlib-dev libtool aspell-dev pcre-dev libxml2-dev bzip2-dev libzip-dev \ 29 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 30 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev libxslt-dev \ 31 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 32 | # prod deps 33 | && apk add --no-cache aspell gettext gmp gnu-libiconv grpc \ 34 | icu imagemagick libjpeg imap-dev libzip libbz2 librdkafka libxml2-utils libpq \ 35 | libmemcached libssh2 libevent libev libxslt linux-headers lua openldap \ 36 | openldap-back-mdb tidyhtml yaml zlib \ 37 | # 38 | # php extensions 39 | && docker-php-source extract \ 40 | && docker-php-ext-remove intl || true \ 41 | && pecl channel-update pecl.php.net \ 42 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 43 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 44 | && docker-pecl-ext-install $PECL_EXTENSIONS \ 45 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 46 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 47 | && docker-php-source delete \ 48 | # 49 | # composer 50 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 51 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer1 \ 52 | # 53 | # cleanup 54 | && apk del temp \ 55 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 56 | && php -f /ext.php 57 | -------------------------------------------------------------------------------- /8.3.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.3.14-fpm-alpine3.21 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 7 | PECL_EXTENSIONS="apcu ast ds ev igbinary lzf memcached mongodb msgpack oauth pcov \ 8 | psr redis rdkafka simdjson ssh2-1.3.1 uuid xdebug xhprof xlswriter yaml" \ 9 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql \ 10 | pdo_pgsql pspell shmop soap sysvshm sysvmsg sysvsem tidy xsl zip" \ 11 | PECL_EXTENSIONS_FUTURE="grpc imagick yaf" \ 12 | PHP_EXTENSIONS_FUTURE="intl sockets" 13 | 14 | # docker-* 15 | COPY docker-* /usr/local/bin/ 16 | 17 | # copy from existing 18 | COPY --from=adhocore/phpfpm:8.3 /usr/local/lib/php/extensions/no-debug-non-zts-20230831/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ 19 | COPY --from=adhocore/phpfpm:8.3 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 20 | 21 | # ext 22 | COPY ext.php /ext.php 23 | 24 | RUN \ 25 | # deps 26 | apk add -U --no-cache --virtual temp \ 27 | # dev deps 28 | autoconf g++ file re2c make zlib-dev libtool aspell-dev pcre-dev libxml2-dev bzip2-dev libzip-dev \ 29 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 30 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev libxslt-dev \ 31 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 32 | # prod deps 33 | && apk add --no-cache aspell gettext gmp gnu-libiconv grpc \ 34 | icu imagemagick libjpeg imap-dev libzip libbz2 librdkafka libxml2-utils libpq \ 35 | libmemcached libssh2 libevent libev libxslt linux-headers lua openldap \ 36 | openldap-back-mdb tidyhtml yaml zlib \ 37 | # 38 | # php extensions 39 | && docker-php-source extract \ 40 | && docker-php-ext-remove intl || true \ 41 | && pecl channel-update pecl.php.net \ 42 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 43 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 44 | && docker-pecl-ext-install $PECL_EXTENSIONS \ 45 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 46 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 47 | && docker-php-source delete \ 48 | # 49 | # composer 50 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 51 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer1 \ 52 | # 53 | # cleanup 54 | && apk del temp \ 55 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 56 | && php -f /ext.php 57 | -------------------------------------------------------------------------------- /8.4.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.4.1-fpm-alpine3.20 2 | 3 | MAINTAINER Jitendra Adhikari 4 | 5 | ENV \ 6 | LD_PRELOAD=/usr/lib/preloadable_libiconv.so \ 7 | PECL_EXTENSIONS="apcu ast ds ev igbinary lzf memcached mongodb msgpack oauth pcov \ 8 | psr redis rdkafka simdjson ssh2-1.3.1 uuid xdebug xhprof xlswriter yaml" \ 9 | PHP_EXTENSIONS="bcmath bz2 calendar exif gd gettext gmp imap intl ldap mysqli pcntl pdo_mysql pgsql \ 10 | pdo_pgsql pspell shmop soap sysvshm sysvmsg sysvsem tidy xsl zip" \ 11 | PECL_EXTENSIONS_FUTURE="grpc imagick yaf" \ 12 | PHP_EXTENSIONS_FUTURE="intl sockets" 13 | 14 | # docker-* 15 | COPY docker-* /usr/local/bin/ 16 | 17 | # copy from existing 18 | # COPY --from=adhocore/phpfpm:8.4 /usr/local/lib/php/extensions/no-debug-non-zts-20230831/*.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/## 19 | # COPY --from=adhocore/phpfpm:8.4 /usr/local/etc/php/conf.d/*.ini /usr/local/etc/php/conf.d/ 20 | 21 | # ext 22 | COPY ext.php /ext.php 23 | 24 | RUN \ 25 | # deps 26 | apk add -U --no-cache --virtual temp \ 27 | # dev deps 28 | autoconf g++ file re2c make zlib-dev libtool aspell-dev pcre-dev libxml2-dev bzip2-dev libzip-dev \ 29 | icu-dev gettext-dev imagemagick-dev openldap-dev libpng-dev gmp-dev yaml-dev postgresql-dev \ 30 | libxml2-dev tidyhtml-dev libmemcached-dev libssh2-dev libevent-dev libev-dev librdkafka-dev lua-dev libxslt-dev \ 31 | freetype-dev jpeg-dev libjpeg-turbo-dev oniguruma-dev \ 32 | # prod deps 33 | && apk add --no-cache aspell gettext gnu-libiconv grpc \ 34 | icu imagemagick libjpeg imap-dev libzip libbz2 librdkafka libxml2-utils libpq \ 35 | libmemcached libssh2 libevent libev libxslt linux-headers lua openldap \ 36 | openldap-back-mdb tidyhtml yaml zlib \ 37 | # 38 | # php extensions 39 | && docker-php-source extract \ 40 | && docker-php-ext-remove intl || true \ 41 | && pecl channel-update pecl.php.net \ 42 | && { php -m | grep gd || docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd; } \ 43 | && docker-php-ext-install-if $PHP_EXTENSIONS \ 44 | && docker-pecl-ext-install $PECL_EXTENSIONS \ 45 | && { docker-php-ext-enable $(echo $PECL_EXTENSIONS | sed -E 's/\-[^ ]+//g') opcache > /dev/null || true; } \ 46 | && { php -m | grep xdebug && docker-php-ext-disable xdebug || true; } \ 47 | && docker-php-source delete \ 48 | # 49 | # composer 50 | && curl -sSL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 51 | && curl -sSL https://getcomposer.org/installer | php -- --1 --install-dir=/usr/local/bin --filename=composer1 \ 52 | # 53 | # cleanup 54 | && apk del temp \ 55 | && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /usr/share/doc/* /usr/share/man/* \ 56 | && php -f /ext.php 57 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Jitendra Adhikari 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## docker-phpfpm 2 | 3 | [![Docker build](https://github.com/adhocore/docker-phpfpm/actions/workflows/build.yml/badge.svg)](https://github.com/adhocore/docker-phpfpm/actions/workflows/build.yml) 4 | [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Production+ready+PHP7+and+PHP8+docker+images+with+plenty+extensions&url=https://github.com/adhocore/docker-phpfpm&hashtags=docker,dockerimage,php7,php8,phpext) 5 | [![Support](https://img.shields.io/static/v1?label=Support&message=%E2%9D%A4&logo=GitHub)](https://github.com/sponsors/adhocore) 6 | 9 | 10 | **Important Note**: To be able to support arm builds ([#81](https://github.com/adhocore/docker-phpfpm/issues/81)) we removed some big and slow to compile extensions like swoole/grpc/phalcon for now. 11 | Check [example](#extensions) below how to add them back in your images based off on `adhcore/phpfpm`. 12 | 13 | Docker PHP FPM with lean alpine base. The download size is just about **~100MB** - tiny given how many extensions it has baked in. 14 | 15 | It contains PHP>=8.4.1, PHP>=8.3.4, PHP>=8.2.17, PHP>=8.1.27 and PHP>=8.0.30 with plenty of common and useful extensions. 16 | 17 | If you are looking for a complete local development stack then check 18 | [`adhocore/lemp`](https://github.com/adhocore/docker-lemp). 19 | 20 | The images are always latest, everytime a new PHP version comes out and its official image is available we will see it in adhocore/phpfpm the next day. 21 | 22 | > This repo is looking for maintainer (start a thread in [#101](https://github.com/adhocore/docker-phpfpm/issues/101) if interested) 23 | 24 | ## Usage 25 | 26 | To pull latest image: 27 | 28 | ```sh 29 | # for php >=8.4.1 30 | docker pull adhocore/phpfpm:8.4 31 | 32 | # for php >=8.3.4 33 | docker pull adhocore/phpfpm:8.3 34 | 35 | # for php >=8.2.17 36 | docker pull adhocore/phpfpm:8.2 37 | 38 | # or for php >=8.1.27 39 | docker pull adhocore/phpfpm:8.1 40 | 41 | # or for php >=8.0.30 42 | docker pull adhocore/phpfpm:8.0 43 | 44 | # or for php >=8.3rc5 (release candidate) 45 | docker pull adhocore/phpfpm:8.3r 46 | 47 | # or for php >=7.4 (end of life) 48 | docker pull adhocore/phpfpm:7.4 49 | ``` 50 | 51 | To use in docker-compose 52 | ```yaml 53 | # ./docker-compose.yml 54 | version: '3' 55 | 56 | services: 57 | phpfpm: 58 | image: adhocore/phpfpm:8.3 59 | container_name: phpfpm 60 | volumes: 61 | - ./path/to/your/app:/var/www/html 62 | # Here you can also volume php ini settings 63 | # - /path/to/zz-overrides:/usr/local/etc/php/conf.d/zz-overrides.ini 64 | ports: 65 | - 9000:9000 66 | environment: 67 | # ... 68 | ``` 69 | 70 | ### Composer 71 | 72 | Latest versions of both Composer v1 and v2 are installed already. You can run v2 with `composer` and v1 with `composer1`. 73 | 74 | ### Extensions 75 | 76 | You can add new extensions in your image like so: 77 | ```Dockerfile 78 | FROM adhocore/phpfpm:8.4 # or 8.3, 8.2 79 | 80 | RUN \ 81 | # setup 82 | apk add -U $PHPIZE_DEPS \ 83 | # 84 | # if it is in pecl: \ 85 | && docker-pecl-ext-install grpc phalcon swoole \ 86 | && apk del $PHPIZE_DEPS \ 87 | # 88 | # if it is in php ext: \ 89 | && docker-php-source extract && docker-php-ext-install-if dba \ 90 | && docker-php-source delete 91 | ``` 92 | 93 | Debug extension `xdebug` is installed but disabled by default for performance reason, 94 | just run `docker-php-ext-enable xdebug` to enable it again without having to rebuild/recompile. 95 | 96 | > `docker-php-ext-install-if` is like the inbuilt `docker-php-ext-install` but a little better, because this one installs extensions only if really needed i.e. not installed at all (so even disabled extensions need not to be installed all over again). 97 | 98 | Below you can find list of extensions by image tags. 99 | 100 | ### PHP8.4 101 | 102 | ``` 103 | PHP 8.4.1, Total extensions: 60 104 | - bcmath - bz2 - calendar - core 105 | - ctype - curl - date - dom 106 | - exif - fileinfo - filter - fpm 107 | - ftp - gd - gettext - gmp 108 | - hash - iconv - imap - intl 109 | - json - ldap - libxml - mbstring 110 | - mysqli - mysqlnd - openssl - pcntl 111 | - pcre - pdo - pdo_mysql - pdo_pgsql 112 | - pdo_sqlite - pgsql - phar - posix 113 | - pspell - random - readline - reflection 114 | - session - shmop - simplexml - soap 115 | - sodium - spl - sqlite3 - standard 116 | - sysvmsg - sysvsem - sysvshm - tidy 117 | - tokenizer - xdebug - xml - xmlreader 118 | - xmlwriter - xsl - zip - zlib 119 | ``` 120 | 121 | ### PHP8.3 122 | 123 | ``` 124 | PHP 8.3.4, Total extensions: 60 125 | - bcmath - bz2 - calendar - core 126 | - ctype - curl - date - dom 127 | - exif - fileinfo - filter - fpm 128 | - ftp - gd - gettext - gmp 129 | - hash - iconv - imap - intl 130 | - json - ldap - libxml - mbstring 131 | - mysqli - mysqlnd - openssl - pcntl 132 | - pcre - pdo - pdo_mysql - pdo_pgsql 133 | - pdo_sqlite - pgsql - phar - posix 134 | - pspell - random - readline - reflection 135 | - session - shmop - simplexml - soap 136 | - sodium - spl - sqlite3 - standard 137 | - sysvmsg - sysvsem - sysvshm - tidy 138 | - tokenizer - xdebug - xml - xmlreader 139 | - xmlwriter - xsl - zip - zlib 140 | ``` 141 | 142 | #### PHP8.2 143 | 144 | The following PHP extensions are installed in `adhocore/phpfpm:8.2`: 145 | 146 | ``` 147 | PHP >=8.2.17, Total extensions: 82 148 | - apcu - ast - bcmath - bz2 149 | - calendar - core - ctype - curl 150 | - date - dom - ds - ev 151 | - exif - fileinfo - filter - fpm 152 | - ftp - gd - gettext - gmp 153 | - hash - iconv - igbinary - imagick 154 | - imap - intl - json - ldap 155 | - libxml - lzf - mbstring - memcached 156 | - mongodb - msgpack - mysqli - mysqlnd 157 | - oauth - openssl - pcntl - pcov 158 | - pcre - pdo - pdo_mysql - pdo_pgsql 159 | - pdo_sqlite - pgsql - phar - posix 160 | - pspell - psr - random - rdkafka 161 | - readline - redis - reflection - session 162 | - shmop - simdjson - simplexml - soap 163 | - sodium - spl - sqlite3 - ssh2 164 | - standard - sysvmsg - sysvsem - sysvshm 165 | - tidy - tokenizer - uuid - xdebug 166 | - xhprof - xlswriter - xml - xmlreader 167 | - xmlwriter - xsl - yaml - zend opcache 168 | - zip - zlib 169 | ``` 170 | 171 | #### PHP8.1 172 | 173 | The following PHP extensions are installed in `adhocore/phpfpm:8.1`: 174 | 175 | ``` 176 | PHP >=8.1.27, Total extensions: 83 177 | - apcu - ast - bcmath - bz2 178 | - calendar - core - ctype - curl 179 | - date - dom - ds - ev 180 | - exif - fileinfo - filter - fpm 181 | - ftp - gd - gettext - gmp 182 | - hash - iconv - igbinary - imagick 183 | - imap - intl - json - ldap 184 | - libxml - lzf - mbstring - memcached 185 | - mongodb - msgpack - mysqli - mysqlnd 186 | - oauth - openssl - pcntl - pcov 187 | - pcre - pdo - pdo_mysql - pdo_pgsql 188 | - pdo_sqlite - pgsql - phar - posix 189 | - pspell - psr - rdkafka - readline 190 | - redis - reflection - session - shmop 191 | - simdjson - simplexml - soap - sockets 192 | - sodium - spl - sqlite3 - ssh2 193 | - standard - sysvmsg - sysvsem - sysvshm 194 | - tidy - tokenizer - uuid - xdebug 195 | - xhprof - xlswriter - xml - xmlreader 196 | - xmlwriter - xsl - yaf - yaml 197 | - zend opcache - zip - zlib 198 | ``` 199 | 200 | #### PHP8.0 201 | 202 | The following PHP extensions are installed in `adhocore/phpfpm:8.0`: 203 | 204 | ``` 205 | PHP >=8.0.30, Total extensions: 84 206 | - apcu - ast - bcmath - bz2 207 | - calendar - core - ctype - curl 208 | - date - dom - ds - ev 209 | - exif - fileinfo - filter - fpm 210 | - ftp - gd - gettext - gmp 211 | - hash - iconv - igbinary - imagick 212 | - imap - intl - json - ldap 213 | - libxml - lzf - mbstring - memcached 214 | - mongodb - msgpack - mysqli - mysqlnd 215 | - oauth - openssl - pcntl - pcov 216 | - pcre - pdo - pdo_mysql - pdo_pgsql 217 | - pdo_sqlite - pgsql - phalcon - phar 218 | - posix - pspell - psr - rdkafka 219 | - readline - redis - reflection - session 220 | - shmop - simdjson - simplexml - soap 221 | - sockets - sodium - spl - sqlite3 222 | - ssh2 - standard - sysvmsg - sysvsem 223 | - sysvshm - tidy - tokenizer - uuid 224 | - xdebug - xhprof - xlswriter - xml 225 | - xmlreader - xmlwriter - xsl - yaf 226 | - yaml - zend opcache - zip - zlib 227 | ``` 228 | 229 | #### PHP7.4 230 | 231 | The following PHP extensions are installed in `adhocore/phpfpm:7.4`: 232 | 233 | ``` 234 | PHP >=7.4.33, Total extensions: 82 235 | - apcu - ast - bcmath - bz2 236 | - calendar - core - ctype - curl 237 | - date - dom - ds - ev 238 | - exif - fileinfo - filter - fpm 239 | - ftp - gd - gettext - gmp 240 | - hash - hrtime - iconv - igbinary 241 | - imagick - imap - intl - json 242 | - ldap - libxml - lua - lzf 243 | - mbstring - memcached - mongodb - msgpack 244 | - mysqli - mysqlnd - oauth - openssl 245 | - pcntl - pcov - pcre - pdo 246 | - pdo_mysql - pdo_pgsql - pdo_sqlite - pgsql 247 | - phar - posix - psr - rdkafka 248 | - readline - redis - reflection - session 249 | - simdjson - simplexml - soap - sockets 250 | - sodium - spl - sqlite3 - ssh2 251 | - standard - sysvmsg - sysvsem - sysvshm 252 | - tideways_xhprof - tidy - tokenizer - uuid 253 | - xdebug - xlswriter - xml - xmlreader 254 | - xmlwriter - yaf - yaml - zend opcache 255 | - zip - zlib 256 | ``` 257 | 258 | Read more about 259 | [pcov](https://github.com/krakjoe/pcov), 260 | [psr](https://github.com/jbboehr/php-psr) 261 | 262 | ### Production Usage 263 | 264 | For production you may want to get rid of some extensions that are not really required. 265 | In such case, you can build a custom image on top `adhocore/phpfpm:8.4` like so: 266 | 267 | ```Dockerfile 268 | FROM adhocore/phpfpm:8.4 # or 8.3 or 8.2 269 | 270 | # Disable extensions you won't need. You can add as much as you want separated by space. 271 | RUN docker-php-ext-disable xdebug pcov ldap 272 | ``` 273 | 274 | > `docker-php-ext-disable` is shell script available in `adhocore/phpfpm` only and not in official PHP docker images. 275 | 276 | > Extensions disabled can be re enabled with `docker-php-ext-enable` later again without the overhead of recompiling/rebuilding all over again. 277 | -------------------------------------------------------------------------------- /docker-pecl-ext-install: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | extDir=$(php -r 'echo ini_get("extension_dir");') 6 | 7 | usage() { 8 | echo "usage: $0 [options] module-name [module-name ...]" 9 | echo " ie: $0 apcu" 10 | echo " $0 apcu redis" 11 | echo 12 | 13 | exit 1 14 | } 15 | 16 | modules= 17 | for module; do 18 | [[ "$module" == "--help" ]] || [[ "$module" == "-h" ]] && usage >&2 19 | [[ -n "$modules" ]] && modules="$modules $module" || modules="$module" || true 20 | done 21 | [[ "" = "$modules" ]] && exit 0 22 | 23 | xmodules= 24 | for module in $modules; do 25 | mod=$(echo $module | sed -E 's/\-[^ ]+//g') 26 | php -m | grep -iq $mod || docker-php-ext-enable $mod >/dev/null 2>&1 || true 27 | { ls $extDir/$mod.so >/dev/null 2>&1 && echo "$module already installed"; } \ 28 | || { [[ "" != "$xmodules" ]] && xmodules="$xmodules $module" || xmodules="$module"; } 29 | done 30 | [[ "" = "$xmodules" ]] && exit 0 31 | 32 | echo "MAKEFLAGS='-j $(nproc)' pecl install $xmodules" 33 | yes '' | MAKEFLAGS="-j $(nproc)" pecl install $xmodules 34 | -------------------------------------------------------------------------------- /docker-php-ext-disable: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | extDir=$(php -r 'echo ini_get("extension_dir");') 6 | iniDir=$PHP_INI_DIR/conf.d 7 | 8 | usage() { 9 | echo "usage: $0 [options] module-name [module-name ...]" 10 | echo " ie: $0 xdebug" 11 | echo " $0 xdebug phalcon" 12 | echo 13 | echo 'Possible values for module-name:' 14 | cat $PHP_INI_DIR/conf.d/*.ini \ 15 | | sed -E "s/(zend_|extension\=|${extDir//\//\\/}\/|\.so)//g" \ 16 | | sort \ 17 | | xargs 18 | echo 19 | 20 | exit 1 21 | } 22 | 23 | modules= 24 | for module; do 25 | [[ "$module" == "--help" ]] \ 26 | || [[ "$module" == "-h" ]] \ 27 | && usage >&2 28 | [[ -n "$modules" ]] \ 29 | && modules="$modules|(=|\/)$module" \ 30 | || modules="(=|\/)$module" 31 | done 32 | 33 | [[ -n "$modules" ]] \ 34 | && rmIni=$(grep -lE "$modules" $iniDir/*.ini) \ 35 | && echo "$rmIni" \ 36 | | xargs rm 37 | -------------------------------------------------------------------------------- /docker-php-ext-install-if: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | extDir=$(php -r 'echo ini_get("extension_dir");') 6 | 7 | modules= 8 | for module; do 9 | [[ "" != "$module" ]] && { 10 | php -m | grep $module || modules="$modules $module" 11 | } 12 | done 13 | [[ "" = "$modules" ]] && exit 0 14 | 15 | xmodules= 16 | for module in $modules; do 17 | mod=$(echo $module | sed -E 's/\-[^ ]+//g') 18 | php -m | grep -iq $mod || docker-php-ext-enable $mod >/dev/null 2>&1 || true 19 | { ls $extDir/$mod.so >/dev/null 2>&1 && echo "$module already installed"; } \ 20 | || { [[ "" != "$xmodules" ]] && xmodules="$xmodules $module" || xmodules="$module"; } 21 | done 22 | [[ "" = "$xmodules" ]] && exit 0 23 | 24 | echo "MAKEFLAGS='-j $(nproc)' docker-php-ext-install $xmodules" 25 | yes '' | MAKEFLAGS="-j $(nproc)" docker-php-ext-install -j "$(nproc)" $xmodules 26 | -------------------------------------------------------------------------------- /docker-php-ext-remove: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | extDir=$(php -r 'echo ini_get("extension_dir");') 6 | 7 | modules=$@ 8 | [[ "" = "$modules" ]] && exit 0 9 | 10 | docker-php-ext-disable $modules || true 11 | for module; do 12 | rm -rf $extDir/$module $extDir/$module.so || true 13 | done 14 | -------------------------------------------------------------------------------- /ext.php: -------------------------------------------------------------------------------- 1 |