#!/usr/bin/env bash # PHP Installer # Min. Requirement : GNU/Linux Ubuntu 14.04 & 16.04 # Last Build : 17/07/2019 # Author : ESLabs.ID (eslabs.id@gmail.com) # Since Version : 1.0.0 # Include helper functions. if [ "$(type -t run)" != "function" ]; then BASEDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd ) # shellchechk source=scripts/helper.sh . "${BASEDIR}/helper.sh" fi # Make sure only root can run this installer script. if [ "$(id -u)" -ne 0 ]; then error "You need to be root to run this script" exit 1 fi # Install PHP. function install_php() { if [[ -n $1 ]]; then PHPv="$1" else # Default PHP is 7.3 (latest stable recommendation). PHPv="7.3" fi # Checking if php already installed. if [[ -n $(command -v "php${PHPv}") ]]; then warning "PHP${PHPv} & FPM package already installed..." else echo "Installing PHP${PHPv} & FPM..." run apt-get install -y php${PHPv} php${PHPv}-bcmath php${PHPv}-cli php${PHPv}-common \ php${PHPv}-curl php${PHPv}-dev php${PHPv}-fpm php${PHPv}-mysql php${PHPv}-gd \ php${PHPv}-gmp php${PHPv}-imap php${PHPv}-intl php${PHPv}-json php${PHPv}-ldap \ php${PHPv}-mbstring php${PHPv}-opcache php${PHPv}-pspell php${PHPv}-readline \ php${PHPv}-recode php${PHPv}-snmp php${PHPv}-soap php${PHPv}-sqlite3 \ php${PHPv}-tidy php${PHPv}-xml php${PHPv}-xmlrpc php${PHPv}-xsl php${PHPv}-zip \ php-geoip php-pear pkg-php-tools spawn-fcgi fcgiwrap geoip-database >> lemper.log 2>&1 if [[ -n $(command -v php${PHPv}) ]]; then status "PHP${PHPv} & FPM package installed." fi # Install php mcrypt? echo "" while [[ $INSTALL_PHPMCRYPT != "y" && $INSTALL_PHPMCRYPT != "n" ]]; do read -p "Do you want to install PHP Mcrypt for encryption/decryption? [y/n]: " -e INSTALL_PHPMCRYPT done echo "" if [[ "$INSTALL_PHPMCRYPT" == Y* || "$INSTALL_PHPMCRYPT" == y* ]]; then if [ "${PHPv//.}" -lt "72" ]; then run apt-get install -y php${PHPv}-mcrypt elif [ "${PHPv}" == "7.2" ]; then run apt-get -y install gcc make autoconf libc-dev pkg-config \ libmcrypt-dev libreadline-dev && \ pecl install mcrypt-1.0.1 >> lemper.log 2>&1 # Enable Mcrypt module. echo "Update PHP ini file with Mcrypt module..." run bash -c "echo extension=mcrypt.so > /etc/php/${PHPv}/mods-available/mcrypt.ini" if [ ! -f /etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini ]; then run ln -s /etc/php/${PHPv}/mods-available/mcrypt.ini /etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini fi if [ ! -f /etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini ]; then run ln -s /etc/php/${PHPv}/mods-available/mcrypt.ini /etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini fi else run apt-get install -y dh-php >> lemper.log 2>&1 # use libsodium instead warning "Mcrypt is deprecated for PHP version ${PHPv} or greater, you should using Libsodium or OpenSSL." fi fi fi } # Remove PHP function remove_php() { if [[ -n $1 ]]; then PHPv="$1" else # Default PHP is 7.3 (latest stable recommendation). PHPv="7.3" fi echo "Uninstalling PHP ${PHPv}..." if [[ -n $(command -v php-fpm${PHPv}) ]]; then run apt-get --purge remove -y php${PHPv} php${PHPv}-bcmath php${PHPv}-cli php${PHPv}-common \ php${PHPv}-curl php${PHPv}-dev php${PHPv}-fpm php${PHPv}-mysql php${PHPv}-gd \ php${PHPv}-gmp php${PHPv}-imap php${PHPv}-intl php${PHPv}-json php${PHPv}-ldap \ php${PHPv}-mbstring php${PHPv}-opcache php${PHPv}-pspell php${PHPv}-readline \ php${PHPv}-recode php${PHPv}-snmp php${PHPv}-soap php${PHPv}-sqlite3 \ php${PHPv}-tidy php${PHPv}-xml php${PHPv}-xmlrpc php${PHPv}-xsl php${PHPv}-zip \ php-geoip php-pear pkg-php-tools spawn-fcgi fcgiwrap geoip-database >> lemper.log 2>&1 isMcrypt=$(/usr/bin/php${PHPv} -m | grep mcrypt) if [[ "_$isMcrypt" == "_mcrypt" ]]; then if [ "${PHPv//.}" -lt "72" ]; then run apt-get --purge remove -y php${PHPv}-mcrypt >> lemper.log 2>&1 elif [ "${PHPv}" == "7.2" ]; then # uninstall run pecl uninstall mcrypt-1.0.1 >> lemper.log 2>&1 # remove module run rm /etc/php/${PHPv}/mods-available/mcrypt.ini if [ -f /etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini ]; then run rm /etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini fi if [ -f /etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini ]; then run rm /etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini fi else run apt-get --purge remove -y dh-php >> lemper.log 2>&1 # use libsodium instead warning "If you're installing Libsodium extension, then remove it separately." fi fi status -e "PHP ${PHPv} installation has been removed." else warning "PHP ${PHPv} installation couldn't be found." fi } # Install ionCube Loader function install_ic() { echo "Installing IonCube PHP loader..." ARCH=$(uname -p) if [[ "${ARCH}" == "x86_64" ]]; then run wget -q "http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" run tar -xzf ioncube_loaders_lin_x86-64.tar.gz run rm -f ioncube_loaders_lin_x86-64.tar.gz else run wget -q "http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz" run tar -xzf ioncube_loaders_lin_x86.tar.gz run rm -f ioncube_loaders_lin_x86.tar.gz fi # Delete old loaders file if [ -d /usr/lib/php/loaders/ioncube ]; then echo "Removing old/existing IonCube PHP loader..." run rm -fr /usr/lib/php/loaders/ioncube fi echo "Installing latest IonCube PHP loader..." run mv -f ioncube /usr/lib/php/loaders/ } # Enable ionCube Loader function enable_ic() { if [[ -n $1 ]]; then PHPv="$1" else PHPv="7.3" # default php install 7.3 (latest stable recommendation) fi echo "Enabling IonCube PHP ${PHPv} loader" if [ -f /usr/lib/php/loaders/ioncube/ioncube_loader_lin_${PHPv}.so ]; then cat > /etc/php/${PHPv}/mods-available/ioncube.ini < /etc/php/${PHPv}/mods-available/sourceguardian.ini <> /etc/php/${PHPv}/fpm/php.ini <> /etc/php/${PHPv}/fpm/php.ini <> /etc/php/${PHPv}/fpm/pool.d/lemper.conf <