author Ahmad Muhardian

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


Install PHP 8 di Linux

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.

Silahkan ketik perintah berikut untuk Ondrej PPA di list repository-mu.

sudo add-apt-repository ppa:ondrej/php

Jika muncul seperti ini:

add ppa ondrej

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.0

Jika tidak bisa, coba:

sudo apt install php8.1

Untuk pengguna Fedora 36 ke atas, PHP sudah secara defaul pakai versi 8. Jadi bisa diinstal dengan perintah berikut:

sudo dnf install php

Setelah itu, tunggulah sampai proses instalasi selesai:

Setelah itu, ketik perintha:

php -v

Untuk memeriksa versi PHP yang terinstal.

versi php8

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.

Silahkan pilih salah satu saja.

Menggunakan Apache

Jika kita perhatikan saat proses instalasi, ada paket tambahan yang terinstal.. yakni libapache2-mod-php8.0.

paket mod apache

Paket ini merupakan modul PHP untuk Apache.

Jika paket ini tidak terinstal, kita bisa menginstalnya dengan perintah:

sudo apt install libapache2-mod-php8.0

Paket ini wajib diinstal jika kita akan menggunakan Apache web server.

Oke, selanjutnya kita harus menginstal apache web server.

Silahkan ketik perintah berikut:

sudo apt install apache2

Setelah terinstal coba cek status service apache2 dengan perintah:

sudo service apache2 status

Jika keluar seperti ini:

status service apache2

Artinya, serive apache2 sedang berjalan dan webserver sudah bisa digunakan.

Sekarang coba buka web browser, lalu buka http://localhost/.

Hasilnya:

localhost apache

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.4

Perintah ini akan melakukan disable modul PHP 7.4, jika kamu menggunakan PHP 7.2, silahkan ganti 7.4 menjadi 7.2.

disable php7

Setelah itu, kita tinggal enable modul PHP 8 dengan perintah:

sudo a2enmod php8.0

Jika keluar seperti ini:

enable php8

Artinya, modul PHP 8 berhasil diaktifkan.

Berikutnya kita tinggal restart service apache2 dengan perintah berikut:

sudo service apache2 restart

Nah, 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 php7

Oke, sekarang mari kita coba..

Sebelumnya, silahkan ubah hak akses folder /var/www/html agar kita bisa menulis file di sana.

Gunakan perintah berikut:

sudo chmod 777 /var/www/html -R

Setelah 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:

info php8

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..

Silahkan lanjutkan.

Pertama, kita harus Install Nginx dengan perintah berikut:

sudo apt install nginx

Ketik y lalu Enter jika keluar seperti ini:

install nginx

Setelah itu, coba ketik perintah:

nginx -v

untuk memeriksa versi Nginx yang tersintal.

versi nginx

Pada komputer saya, terinstal Nginx versi 1.18.0.

Berikutnya coba cek status service Nginx dengan perintah:

sudo service nginx status

Jika keluar seperti ini:

nginx service status

Artinya status web server Nginx sedang aktif. Kita bisa mencobanya dengan membuka localhost dari web browser.

Hasilnya akan seperti ini:

Configure Virtual Host Or Server Block On Nginx | Tutorials24x7

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-fpm

Tunggulah sampai prosesnya selesai.

instalasi php fpm

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

sudo service php8.0-fpm status

Hasilnya:

service php fpm

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.

file site default nginx

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 -t

Jika tidak ada yang error..

nginx-t

Maka konfigurasinya sudah benar.

Terakhir, silahkan restart service nginx dengan perintah berikut:

sudo service nginx restart

Selesai!

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:

php info fastcgi

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:

http error 500

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.

Silahkan 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 = On

Perhatikan 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.

php-ini

Simpan, kemudian restart service apache2 dengan perintah:

sudo service apache2 restart

Setelah itu, coba buka kembali script atau halaman php yang error.

Maka hasilnya:

php-error

Dengan demikian, kita sudah bisa menggunakan webserver Apache2 untuk development server.

PHP 8 dan MySQL

Jika kita ingin menggunakan PHP 8 dengan MySQL, maka ekstension php-mysql harus diinstal.

Jika tidak, maka akan terjadi error serpti ini:

php-error

Error ini artinya, PHP gagal menemukan fungsi mysqli_connect() karena kita belum menginstal ekstension mysql.

Kita bisa menginstal ekstension MySQL untuk PHP 8 dengan perintah berikut:

sudo apt install php8.0-mysql

Atau untuk PHP 8.1:

sudo apt install php8.1-mysql

Setelah itu, jangan lupa untuk restart service apache2 dengan perintah:

sudo service apache2 restart

Dengan 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:

phpmyadmin-php-8-error

Ini disebabkan karena ada beberapa ekstension yang belum terinstal, seperti php-intl, php-mbstring, php-zip, dll.

Untuk menginstal semua ekstension yang dibutuhkan, silahkan 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-bz2

PHP 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-bz2

Setelah itu, jangan lupa restart service apache2 dengan perintah:

sudo service apache2 restart

Maka sekarang kita akan bisa membuka PHPmyadmin dengan PHP 8.

phpmyadmin dan php8

Apa Selanjutnya?

Pada tutoral ini, kita sudah belajar cara menginstal PHP 8 dan melakukan upgrade dari PHP 7 ke PHP 8.

Untuk web server, silahkan 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, silahkan tanyakan di komentar. Jangan lupa lampirkan screenshot agar gampang dijawab.