#!/bin/bash export MC="-j$(nproc)" ERROR_CODE=0 echo echo "============================================" echo "PHP version : ${PHP_VERSION}" echo "Install extensions : $1" echo "============================================" echo installExtensionFromTgz() { tgzName=$1 result="" extensionName="${tgzName%%-*}" shift 1 result=$@ mkdir /tmp/data/${tgzName} tar -zxvf /tmp/data/${tgzName}.tar.gz -C /tmp/data/${tgzName} --strip-components=1 ( cd /tmp/data/${tgzName} && phpize && ./configure ${result} && make ${MC} && make install ) docker-php-ext-enable ${extensionName} } is_extension_installed() { local extension=$1 if php -m | grep -q "^$extension$"; then echo "------ $extension is already installed ------" return 0 else return 1 fi } install_php_extensions() { local extension=$1 install-php-extensions $extension local check_name=$2 if [ -z "$check_name" ]; then check_name=$extension fi if is_extension_installed "$check_name"; then echo "------ install-php-extensions $extension succeeded ------" return fi echo "------ install-php-extensions $extension failed ------" ERROR_CODE=1 return 1 } pecl_install() { local extension=$1 printf "\n" | pecl install $extension docker-php-ext-enable $extension if is_extension_installed "$extension"; then echo "------ pecl install $extension succeeded ------" return 0 fi echo "------ pecl install $extension failed ------" ERROR_CODE=1 return 1 } docker_php_ext_install() { local extension=$1 local check_name=$2 if [ -z "$check_name" ]; then check_name=$extension fi docker-php-ext-install $extension if is_extension_installed "$check_name"; then echo "------ docker-php-ext-install install $extension succeeded ------" return 0 fi echo "------ docker-php-ext-install install $extension failed------" ERROR_CODE=1 return 1 } install_extension_default() { local extension=$1 printf "\n" | pecl install $extension if [ $? -eq 0 ]; then docker-php-ext-enable $extension echo "------ pecl install $extension succeeded ------" else echo "------ pecl install $extension failed use docker-php-ext-install------" docker-php-ext-install ${MC} $extension if [ $? -eq 0 ]; then echo "------ docker-php-ext-install install $extension succeeded ------" else echo "------ docker-php-ext-install install $extension failed use install-php-extensions------" install-php-extensions $extension if [ $? -eq 0 ]; then echo "------ install-php-extensions $extension succeeded ------" else echo "------ install-php-extensions $extension failed ------" ERROR_CODE=1 fi fi fi } install_msg() { if [ $? -eq 0 ]; then echo "------ install $1 succeeded ------" else echo "------ install $1 failed ------" ERROR_CODE=1 fi } install_memcache() { printf "\n" | pecl install memcache install_msg memcache docker-php-ext-enable memcache } install_pdo_pgsql() { apt-get update && apt-get install -y libpq-dev install_msg pdo_pgsql docker-php-ext-install pdo_pgsql } install_pdo_mysql() { docker-php-ext-install pdo_mysql install_msg pdo_mysql } install_yaf() { pecl install yaf install_msg yaf docker-php-ext-enable yaf } install_imagick() { apt-get update && apt-get install -y libmagickwand-dev installExtensionFromTgz imagick-3.8.0 install_msg imagick } install_extension() { local extension=$1 if [ -z "$extension" ]; then return fi if is_extension_installed "$extension"; then return fi echo "------ install extension: $extension ------" if [ "$extension" = "gd" ]; then install_php_extensions gd elif [ "$extension" = "memcache" ]; then install_memcache elif [ "$extension" = "yaf" ]; then install_yaf elif [ "$extension" = "pdo_pgsql" ]; then install_pdo_pgsql elif [ "$extension" = "pdo_mysql" ]; then install_pdo_mysql elif [ "$extension" = "yaml" ]; then apt-get install -y libyaml-dev pecl_install yaml elif [ "$extension" = "mongodb" ]; then apt-get install -y libssl-dev pecl_install mongodb elif [ "$extension" = "mcrypt" ]; then apt-get install -y libmcrypt-dev pecl_install mcrypt elif [ "$extension" = "ssh2" ]; then apt-get install -y libssh2-1-dev libssh2-1 pecl_install ssh2 elif [ "$extension" = "rdkafka" ]; then apt-get install -y librdkafka-dev pecl_install rdkafka elif [ "$extension" = "varnish" ]; then apt-get install -y libvarnishapi-dev pecl_install varnish elif [ "$extension" = "bcmath" ]; then docker_php_ext_install bcmath elif [ "$extension" = "pcntl" ]; then docker_php_ext_install pcntl elif [ "$extension" = "shmop" ]; then docker_php_ext_install shmop elif [ "$extension" = "gettext" ]; then docker_php_ext_install gettext elif [ "$extension" = "sockets" ]; then docker_php_ext_install sockets elif [ "$extension" = "sysvsem" ]; then docker_php_ext_install sysvsem elif [ "$extension" = "sysvmsg" ]; then docker_php_ext_install sysvmsg elif [ "$extension" = "opcache" ]; then docker_php_ext_install opcache "Zend OPcache" elif [ "$extension" = "mysqli" ]; then install_php_extensions mysqli elif [ "$extension" = "sysvshm" ]; then docker_php_ext_install sysvshm elif [ "$extension" = "calendar" ]; then docker_php_ext_install calendar elif [ "$extension" = "sodium" ]; then apt-get install -y libsodium-dev docker_php_ext_install sodium elif [ "$extension" = "zip" ]; then apt-get update && apt-get install -y libzip-dev docker_php_ext_install zip elif [ "$extension" = "memcached" ]; then install_php_extensions memcached elif [ "$extension" = "igbinary" ]; then pecl_install igbinary elif [ "$extension" = "apcu" ]; then pecl_install apcu elif [ "$extension" = "redis" ]; then install_php_extensions redis elif [ "$extension" = "xdebug" ]; then install_php_extensions xdebug elif [ "$extension" = "imap" ]; then install_php_extensions imap elif [ "$extension" = "intl" ]; then install_php_extensions intl elif [ "$extension" = "swoole" ]; then install_php_extensions swoole elif [ "$extension" = "pgsql" ]; then install_php_extensions pgsql elif [ "$extension" = "curl" ]; then install_php_extensions curl elif [ "$extension" = "sg16" ]; then install_php_extensions sourceguardian "SourceGuardian" elif [ "$extension" = "snmp" ]; then install_php_extensions snmp elif [ "$extension" = "mbstring" ]; then install_php_extensions mbstring elif [ "$extension" = "pdo_firebird" ]; then install_php_extensions pdo_firebird elif [ "$extension" = "pdo_dblib" ]; then install_php_extensions pdo_dblib elif [ "$extension" = "pdo_oci" ]; then install_php_extensions pdo_oci elif [ "$extension" = "pdo_odbc" ]; then install_php_extensions pdo_odbc elif [ "$extension" = "oci8" ]; then install_php_extensions oci8 elif [ "$extension" = "odbc" ]; then install_php_extensions odbc elif [ "$extension" = "soap" ]; then install_php_extensions soap elif [ "$extension" = "xsl" ]; then install_php_extensions xsl elif [ "$extension" = "xmlrpc" ]; then install_php_extensions xmlrpc elif [ "$extension" = "readline" ]; then install_php_extensions readline elif [ "$extension" = "snmp" ]; then install_php_extensions snmp elif [ "$extension" = "tidy" ]; then install_php_extensions tidy elif [ "$extension" = "gmp" ]; then install_php_extensions gmp elif [ "$extension" = "ldap" ]; then install_php_extensions ldap elif [ "$extension" = "imagick" ]; then install_imagick elif [ "$extension" = "amqp" ]; then install_php_extensions amqp elif [ "$extension" = "zookeeper" ]; then install_php_extensions zookeeper elif [ "$extension" = "ionCube" ]; then install_php_extensions ioncube_loader "ionCube Loader" elif [ "$extension" = "pdo_sqlsrv" ]; then install_php_extensions pdo_sqlsrv elif [ "$extension" = "sqlsrv" ]; then install_php_extensions sqlsrv elif [ "$extension" = "enchant" ]; then install_php_extensions enchant elif [ "$extension" = "pspell" ]; then install_php_extensions pspell elif [ "$extension" = "bz2" ]; then install_php_extensions bz2 elif [ "$extension" = "smbclient" ]; then install_php_extensions smbclient elif [ "$extension" = "event" ]; then install_php_extensions event elif [ "$extension" = "zmq" ]; then install_php_extensions zmq else install_extension_default $extension fi } extension=$1 if [[ $extension == *,* ]]; then echo "${extension}" | tr ',' '\n' | while read -r extension; do install_extension $extension done else install_extension $extension if [ $ERROR_CODE -ne 0 ]; then exit $ERROR_CODE fi fi docker-php-source delete exit 0