Cara Install PHP 8 di Linux (Upgrade PHP 7 ke PHP 8)

PHP 8 sudah rilis, yay!
Tapi..
PHP 8 belum tersedia secara default di repository paket Linux. Biasanya akan menunggu beberapa bulan bahkan tahun agar bisa ditambahkan secara default. Kecuali kita menggunakan Linux yang rolling release.
Nah, buat kamu yang tidak sabar ingin mencoba PHP 8.. khususnya di Linux Ubuntu 20.04 LTS, kamu bisa ikuti tutorial ini untuk menginstalnya.
Mari kita pelajari!
Step 1 - Tambahkan PPA Repository
Saat ini versi default PHP di ubuntu 20.04 adalah PHP 7.4. Jika kita mencoba menginstal PHP8, maka tidak akan bisa, karena di repository tidak ada paket PHP8.
Solusinya kita bisa menggunakan PPA. Salah satu PPA yang menyediakan paket PHP8 adalah Ondrej PPA.
Silakan ketik perintah berikut untuk Ondrej PPA di list repository-mu.
sudo add-apt-repository ppa:ondrej/phpJika muncul seperti ini:

Tekan Enter, maka PPA Ondrej akan ditambahkan. Tunggulah sampai prosesnya selesai.
Setelah itu baru kita bisa lanjut ke:
Step 2 - Instalasi PHP 8
Nah untuk menginstal PHP, kita bisa ketik perintah:
sudo apt install php8.0Jika tidak bisa, coba:
sudo apt install php8.1Untuk pengguna Fedora 36 ke atas, PHP sudah secara default pakai versi 8. Jadi bisa diinstal dengan perintah berikut:
sudo dnf install phpSetelah itu, tunggulah sampai proses instalasi selesai:
Setelah itu, ketik perintah:
php -vUntuk memeriksa versi PHP yang terinstal.

Pada komputer saya, php yang terinstall adalah versi 8.1.3.
Berikutnya, kita tinggal konfigurasi PHP agar bisa digunakan di web server.
Step 3 - Konfigurasi Web Server
Ada dua web server yang sering digunakan untuk menjalankan PHP, yakni Apache dan Nginx.
Silakan pilih salah satu saja.
Menggunakan Apache
Jika kita perhatikan saat proses instalasi, ada paket tambahan yang terinstal.. yakni libapache2-mod-php8.0.

Paket ini merupakan modul PHP untuk Apache.
Jika paket ini tidak terinstal, kita bisa menginstalnya dengan perintah:
sudo apt install libapache2-mod-php8.0Paket ini wajib diinstal jika kita akan menggunakan Apache web server.
Oke, selanjutnya kita harus menginstal apache web server.
Silakan ketik perintah berikut:
sudo apt install apache2Setelah terinstal coba cek status service apache2 dengan perintah:
sudo service apache2 statusJika keluar seperti ini:

Artinya, service apache2 sedang berjalan dan webserver sudah bisa digunakan.
Sekarang coba buka web browser, lalu buka http://localhost/.
Hasilnya:

Ini artinya web server apache sudah berjalan dengan benar. Tinggal kita test menjalankan PHP 8 dari sana.
Upgrade PHP 7 ke PHP 8 di Apache
Jika di komputermu sudah terinstal PHP 7 dan ingin menggantinya ke versi PHP 8, maka kita tinggal melakukan disable modul PHP7 lalu mengaktifkan modul PHP8.
Caranya ketik perintah berikut:
sudo a2dismod php7.4Perintah ini akan melakukan disable modul PHP 7.4, jika kamu menggunakan PHP 7.2, silakan ganti 7.4 menjadi 7.2.

Setelah itu, kita tinggal enable modul PHP 8 dengan perintah:
sudo a2enmod php8.0Jika keluar seperti ini:

Artinya, modul PHP 8 berhasil diaktifkan.
Berikutnya kita tinggal restart service apache2 dengan perintah berikut:
sudo service apache2 restartNah, sekarang Apache sudah menggunakan PHP versi 8. Jika kamu ingin kembalikan ke versi 7, tinggal jalankan lagi perintah seperti di atas.
sudo a2dismod php8.0 #diable modul php8
sudo a2enmod php7.4 #enable modul php7Oke, sekarang mari kita coba..
Sebelumnya, silakan ubah hak akses folder /var/www/html agar kita bisa menulis file di sana.
Gunakan perintah berikut:
sudo chmod 777 /var/www/html -RSetelah itu, kita akan coba membuat file PHP baru di dalam folder tersebut.
Oh iya, folder /var/www/html merupakan folder yang digunakan oleh Apache untuk menyimpan file web.
Ok, sekarang buatlah file baru di dalam folder /var/www/html/ dengan nama info.php dengan isi sebagai berikut:
<?php
phpinfo();Setelah itu, buka alamat localhost/info.php, maka hasilnya:

Mantap 👍 PHP 8 dan Apache sudah terinstal dengan benar.
Menggunakan Nginx
Nginx adalah salah satu web server yang sering digunakan, baik untuk development dan production.
Jika kamu sudah menggunakan Apache, sebenarnya tidak perlu lagi menggunakan Nginx.
Tapi, jika kamu ingin mencobanya..
Silakan lanjutkan.
Pertama, kita harus Install Nginx dengan perintah berikut:
sudo apt install nginxKetik y lalu Enter jika keluar seperti ini:

Setelah itu, coba ketik perintah:
nginx -vuntuk memeriksa versi Nginx yang terinstal.

Pada komputer saya, terinstal Nginx versi 1.18.0.
Berikutnya coba cek status service Nginx dengan perintah:
sudo service nginx statusJika keluar seperti ini:

Artinya status web server Nginx sedang aktif. Kita bisa mencobanya dengan membuka localhost dari web browser.
Hasilnya akan seperti ini:

Tapi..
Saat ini nginx masih belum bisa menjalankan PHP. Dia hanya bisa menjalankan HTML saja.
Ini disebabkan karen kita belum menginstal FastCGI.
Oke, sekarang mari kita instal, ketik perintah ini:
sudo apt install php8.0-fpmTunggulah sampai prosesnya selesai.

Setelah itu, coba lihat status service php8.0-fpm dengan perintah:
sudo service php8.0-fpm statusHasilnya:

Oke, sekarang service Nginx dan PHP FastCGI sama-sama aktif.
Tinggal satu langkah lagi.
Kita harus konfigurasi Nginx agar dapat menggunakan service dari PHP FastCGI.
Caranya:
Buka file /etc/nginx/sites-available/default dengan user root.

Kemudian ubah pada bagian pass PHP scripts to FastCGI server seperti ini:
server {
# ... some other code
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}
}Versi full punya saya seperti ini:
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}Jika kamu ingin menggunakan PHP 7, maka tinggal ubah saja php8.0-fpm.sock menjadi php7.4-fpm.sock.
Berikutnya coba test konfigurasi dengan perintah:
sudo nginx -tJika tidak ada yang error..

Maka konfigurasinya sudah benar.
Terakhir, silakan restart service nginx dengan perintah berikut:
sudo service nginx restartSelesai!
Sekarang kita bisa mencobanya.
Buatlah file baru di dalam folder /var/www/html dengan nama info.php dan isi filenya seperti ini:
<?php
phpinfo();Setelah itu, buka web browser dan arahkan ke localhost/info.php.
Maka hasilnya:

Mantap!
Sekarang PHP 8 sudah menggunakan web server Nginx dengan FastCGI.
PHP 8 Debug Mode di Apache
Jika kita ingin menggunakan Apache sebagai development Server, maka pesan error PHP harus diaktifkan.
Jika tidak, maka server akan merespon dengan HTTP ERROR 500.
Contohnya seperti ini:

Jika di server production, ini tidak masalah. Tapi jika kita pakai untuk development, maka ini akan jadi masalah. Soalnya kita tidak bisa tau pesan error dari programnya.
Nah untuk mengatasi ini, kita harus mengaktifkan debug mode untuk PHP 8.
Silakan buka file /etc/php/apache2/8.0/php.ini sebagai user root, kemudian ubah isinya menjadi seperti ini:
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
track_errors = OnPerhatikan versi PHP yang kamu gunakan:
- PHP 8.0 maka ubah
/etc/php/apache2/8.0/php.ini - PHP 8.1 maka ubah di
/etc/php/apache2/8.1/php.ini
Oke, sekarang kita sudah mengubahnya.

Simpan, kemudian restart service apache2 dengan perintah:
sudo service apache2 restartSetelah itu, coba buka kembali script atau halaman php yang error.
Maka hasilnya:

Dengan demikian, kita sudah bisa menggunakan webserver Apache2 untuk development server.
PHP 8 dan MySQL
Jika kita ingin menggunakan PHP 8 dengan MySQL, maka extension php-mysql harus diinstal.
Jika tidak, maka akan terjadi error seperti ini:

Error ini artinya, PHP gagal menemukan fungsi mysqli_connect() karena kita belum menginstal extension mysql.
Kita bisa menginstal extension MySQL untuk PHP 8 dengan perintah berikut:
sudo apt install php8.0-mysqlAtau untuk PHP 8.1:
sudo apt install php8.1-mysqlSetelah itu, jangan lupa untuk restart service apache2 dengan perintah:
sudo service apache2 restartDengan demikian kita sudah bisa menggunakan MySQL di PHP 8.
Phpmyadmin untuk PHP 8
Jika sebelumnya kamu menggunakan Phpmyadmin dan menggunakan PHP 8 untuk menjalankannya, maka akan terjadi error seperti ini:

Ini disebabkan karena ada beberapa extension yang belum terinstal, seperti php-intl, php-mbstring, php-zip, dll.
Untuk menginstal semua extension yang dibutuhkan, silakan ketik perintah berikut:
PHP 8.0:
sudo apt install php8.0-cli php8.0-common php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-xsl php8.0-zip php8.0-bz2PHP 8.1:
sudo apt install php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2Setelah itu, jangan lupa restart service apache2 dengan perintah:
sudo service apache2 restartMaka sekarang kita akan bisa membuka PHPmyadmin dengan PHP 8.

Apa Selanjutnya?
Pada tutorial ini, kita sudah belajar cara menginstal PHP 8 dan melakukan upgrade dari PHP 7 ke PHP 8.
Untuk web server, silakan pilih salah satu. Saya lebih prefer Apache untuk development dan untuk production lebih sering menggunakan Nginx.
Selanjutnya kita bisa coba fitur terbaru di PHP 8 dan juga bisa coba belajar Laravel 9.
Jika ada kendala, silakan tanyakan di komentar. Jangan lupa lampirkan screenshot agar gampang dijawab.