Menggunakan banyak versi PHP di Ubuntu 18.04

Menggunakan banyak versi PHP sekaligus dapat dilakukan dengan menggunakan FPM (FastCGI Process Manager). PHP-FPM berjalan terpisah dengan Web Server, tidak seperti pada apache dengan mod_php nya dimana php melekat pada proses apache.

Dengan adanya process PHP yang terpisah, parsing file php nantinya akan “dilempar” oleh Web Server (Apache atau Nginx) ke process PHP-FPM yang ditentukan. Diagram nya kurang lebih seperti dibawah ini, 

PHP-FPM

PHP-FPM dapat memiliki banyak pool, dimana masing – masing pool tersebut konfigurasinya dapat kita tentukan sesuai kebutuhan. Misalnya ada pool untuk front-end dimana memory_limit nya kecil tapi worker-nya banyak, kemudian ada pool khusus untuk admin yang execution_time nya besar dengan beberapa fungsi “khusus” di aktifkan. Kebutuhan seperti itu dapat dipenuhi dengan membuat pool yang berbeda – beda.

Artikel ini menggunakan PPA (Personal Package Archive) yang dibuat oleh pak Ondřej. pak Ondřej juga punya repository yang bisa dipake untuk debian Jessie dan Stretch, bisa dilihat disini

Bagi pengguna Distro lain selain Ubuntu dan Debian mungkin Phpbrew bisa menjadi alternatif jika repository distro anda belum menyediakan banyak versi php.

Install

Script dibawah ini menginstall apache, PHP 5.6, 7.0, 7.1, 7.2, dan 7.3
sekaligus meng-enable penggunaan .htaccess. Script ini saya coba pada Ubuntu yang masih Fresh atau baru di-install.

Anda dapat meng-copy seluruh script ini kemudian simpan dengan nama install.bash, kemudian eksekusi dengan perintah bash install.bash. atau anda dapat meng-copy line yang dibutuhkan saja

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

# Tambahkan repository PHP ( PPA onrej )
apt-get -y install software-properties-common
add-apt-repository -y ppa:ondrej/php
apt-get update --fix-missing

# Install tzdata (Timezone)
apt-get install -y tzdata
ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata

# Install Apache2
apt-get -y install apache2

# Enable Apache Module
a2enmod alias rewrite proxy_fcgi setenvif

# Restart Apache
service apache2 restart

# Cegah Error default PHP-FPM Socket
mkdir /run/php

# Install PHP 5.6
apt-get -y install php5.6 php5.6-fpm php5.6-cli php5.6-xsl php5.6-json php5.6-intl php5.6-mbstring php5.6-readline php5.6-xml php5.6-zip php5.6-gd php5.6-mcrypt php5.6-curl php5.6-mysql
echo 'Define php56 "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"' >> /etc/apache2/conf-available/phpHandlers.conf
service php5.6-fpm restart

# Install PHP 7.0
apt-get -y install php7.0 php7.0-fpm php7.0-cli php7.0-xsl php7.0-json php7.0-intl php7.0-mbstring php7.0-readline php7.0-xml php7.0-zip php7.0-gd php7.0-mcrypt php7.0-curl php7.0-mysql
echo 'Define php70 "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"' >> /etc/apache2/conf-available/phpHandlers.conf
service php7.0-fpm restart

# Install PHP 7.1
apt-get -y install php7.1 php7.1-fpm php7.1-cli php7.1-xsl php7.1-json php7.1-intl php7.1-mbstring php7.1-readline php7.1-xml php7.1-zip php7.1-gd php7.1-mcrypt php7.1-curl php7.1-mysql
echo 'Define php71 "proxy:unix:/run/php/php7.1-fpm.sock|fcgi://localhost"' >> /etc/apache2/conf-available/phpHandlers.conf
service php7.1-fpm restart

# Install PHP 7.2
apt-get -y install php7.2 php7.2-fpm php7.2-cli php7.2-xsl php7.2-json php7.2-intl php7.2-mbstring php7.2-readline php7.2-xml php7.2-zip php7.2-gd php7.2-curl php7.2-mysql
echo 'Define php72 "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"' >> /etc/apache2/conf-available/phpHandlers.conf
service php7.2-fpm restart

# Install PHP 7.3
apt-get -y install php7.3 php7.3-fpm php7.3-cli php7.3-xsl php7.3-json php7.3-intl php7.3-mbstring php7.3-readline php7.3-xml php7.3-zip php7.3-gd php7.3-curl php7.3-mysql
echo 'Define php73 "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"' >> /etc/apache2/conf-available/phpHandlers.conf
service php7.3-fpm restart

# Enable .htaccess
sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' /etc/apache2/apache2.conf

# Enable phpHandlers
a2enconf phpHandlers
service apache2 reload

Dengan script diatas, saya membuat file /etc/apache2/conf-available/phpHandler.conf, yang isinya dibawah ini:

Define php56 "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
Define php70 "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
Define php71 "proxy:unix:/run/php/php7.1-fpm.sock|fcgi://localhost"
Define php72 "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
Define php73 "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"

Seluruh unix-socket dari php-fpm saya define disana untuk mempermudah pemasangan nya nanti.

Seting Web Server

Apache

Untuk mengganti versi php pada apache anda dapat meng-aktifkan konfigurasi yang disediakan oleh php-fpm, misalnya php7.1-fpm:

a2enconf php7.1-fpm
service apache2 restart

Kemudian coba cek versi php anda dengan phpinfo();

Konfigurasi di Apache juga dapat dipasang di virtual host maupun di .htaccess, jika anda ingin versi PHP yang berbeda-beda di tiap folder maka anda dapat menggunakan .htaccess seperti dibawah ini:

AddHandler ${php72} .php

Untuk Virtualhost anda dapat menaruhnya didalam directive Directory, misalnya:

<Directory "/var/www/project">
AddHandler ${php72} .php
</Directory>

${php72} adalah variable yang di define pada file  /etc/apache2/conf-available/phpHandler.conf, anda dapat mengubah ini sesuai kebutuhan anda.

PHP CLI

Jika anda menjalankan seluruh script diatas melalui command-line / terminal maka anda akan mendapatkan php7.3 sebagai versi php default, untuk menggantinya secara global gunakan perintah update-alternatives  seperti dibawah ini:

update-alternatives --set php /usr/bin/php7.1

atau jika anda tidak ingin mengubahnya secara global, anda dapat menggunakan full path dari binary php sebelum meng-eksekusi kode php anda, misalnya:

/usr/bin/php7.2 test.php
Kadek Jayak
Seorang Web Developer di Denpasar Bali. Nulis blog hanya sekedar iseng dan berbagi pengalaman.
%d blogger menyukai ini: