Perubahan Karakter Mesin PHP 7 ke PHP 8
Fatal error atau TypeError.
Ketika PHP menemui Fatal error di tengah proses pembuatan halaman dan mekanisme penanganan eror bawaan WordPress tidak menangkapnya secara bersih, eksekusi skrip langsung berhenti seketika di titik baris tersebut. Web server seperti LiteSpeed, Apache, atau Nginx kemudian mengirimkan respons HTTP 500 (Internal Server Error) atau respons kosong dengan status 200 tanpa konten HTML. Di browser pengguna, respons kosong ini tampak sebagai layar putih polos.
Beberapa fungsi lama yang resmi dihapus di PHP 8 sering menjadi biang keladi pada plugin yang tidak diperbarui selama bertahun-tahun. Pemanggilan fungsi seperti create_function() atau each() langsung menghentikan proses eksekusi skrip karena fungsinya memang sudah tidak ada lagi di dalam memori PHP 8.
Menyalakan Log Debugging untuk Menemukan Baris Bermasalah
display_errors demi keamanan agar jalur file sistem dan kredensial server tidak terlihat oleh publik.
Untuk melihat penyebab pasti berhentinya skrip, kita bisa memanfaatkan fitur logging bawaan WordPress melalui berkas wp-config.php. Buka file tersebut lewat file manager atau SSH, cari baris define('WP_DEBUG', false);, lalu sesuaikan konfigurasi agar WordPress menulis eror ke dalam file log tersembunyi.
PHP
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);wp-content/debug.log.
Saat membaca baris eror di dalam debug.log, jangan teralihkan oleh rentetan teks penjelas yang panjang. Fokuskan mata kamu pada dua elemen utama: jenis eror dan jalur file (file path). Contoh format output log fatal umumnya terlihat seperti ini:
TEXT
[10-May-2024 04:12:01 UTC] PHP Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /home/user/public_html/wp-content/plugins/revslider/inc_php/framework/base_admin.class.php:28revslider pada baris ke-28, disebabkan oleh pemanggilan fungsi count() yang menerima nilai kosong padahal PHP 8 mewajibkan tipe data array. Dengan bukti log ini, kamu tidak perlu menebak apakah masalahnya ada di WordPress inti, database, atau tema.
Langkah Isolasi Tanpa Akses Dashboard WordPress
wp-admin sama-sama mengalami layar putih, kamu tidak bisa menonaktifkan plugin lewat antarmuka grafis WordPress. Cara paling cepat dan aman untuk memulihkan akses sementara adalah mengisolasi direktori plugin yang bersangkutan melalui file manager hosting atau terminal SSH.
Masuk ke folder wp-content/plugins/, lalu ubah nama folder plugin yang tercatat di log eror, misalnya mengubah revslider menjadi revslider_disabled. Perubahan nama folder ini membuat WordPress tidak dapat menemukan file registrasi plugin tersebut, sehingga sistem secara otomatis melepas (deactivate) plugin dari antrean pemuatan tanpa menghapus data atau konfigurasinya di database.
Setelah folder plugin bermasalah diubah namanya, muat ulang halaman website. Jika situs kembali tampil normal, kamu sudah memverifikasi bahwa penyebab utama kegagalan memang berada pada plugin tersebut. Dari titik ini, kamu punya waktu tenang untuk mencari versi pembaruan plugin yang sudah mendukung PHP 8, menggantinya dengan alternatif lain, atau menurunkan kembali versi PHP ke 7.4 untuk sementara waktu sembari menyiapkan langkah perbaikan menyeluruh.
Trik yang sama berlaku jika file yang tercatat di debug.log berada di bawah folder wp-content/themes/. Mengubah nama folder tema yang sedang aktif akan memaksa WordPress kembali ke tema standar bawaan (seperti Twenty Twenty-Four) asalkan file tema standar tersebut tersedia di server.
Mengapa Menurunkan Versi PHP Bukan Solusi Jangka Panjang
Strategi Aman Sebelum Melakukan Cutover Versi PHP
- Audit Plugin yang Tidak Aktif dan Usang: Periksa daftar plugin kamu. Hapus plugin yang tidak digunakan daripada membiarkannya menumpuk. Periksa juga tanggal pembaruan terakhir pada halaman repositori plugin; jika sebuah plugin tidak pernah diperbarui selama lebih dari dua tahun, plugin tersebut berpeluang besar menimbulkan galat fatal di PHP 8.
- Gunakan Environment Staging: Gandakan website kamu ke subdomain atau server terpisah (staging environment). Di lingkungan tiruan ini, naikkan versi PHP ke 8.1, 8.2, atau 8.3 terlebih dahulu. Uji fungsi-fungsi krusial seperti proses checkout, pengiriman formulir kontak, dan alur login pengguna.
- Cek Log Web Server: Saat menguji di staging, pantau file log eror web server secara langsung. Hal ini membantu menangkap peringatan Deprecated yang belum memicu WSoD tetapi berpotensi menjadi eror fatal di sub-versi PHP berikutnya.
- Perbarui Tema dan Plugin Sebelum Naik Versi: Selalu perbarui WordPress inti, tema, dan semua plugin ke versi paling mutakhir yang tersedia sebelum kamu menekan tombol ganti versi PHP di panel hosting. Sering kali pengembang plugin sudah merilis kompatibilitas PHP 8 di versi terbaru mereka.
WP_DEBUG_LOG, membaca berkas log secara cermat, dan mengisolasi komponen yang belum kompatibel, kita bisa menjaga website tetap aman di versi PHP modern tanpa harus mengorbankan stabilitas operasional harian.