Lewati ke isi

Server & Infrastruktur

Penyebab Error 500 di Website PHP dan Cara Melacaknya

Error 500 di website PHP hampir selalu meninggalkan jejak di log. Ikuti langkah melacaknya, dari log web server sampai pesan fatal error PHP.

Terbit 6 menit baca

Jawaban singkat

Error 500 di website PHP biasanya disebabkan fatal error PHP, salah tulis di .htaccess, memory_limit habis, ekstensi PHP yang hilang, atau izin file yang salah. Cara tercepat melacaknya adalah membaca log error web server dan log PHP pada waktu error terjadi.

Daftar isi
  1. Bagaimana cara melacak error 500?
  2. Langkah 1: Catat waktu dan URL yang error
  3. Langkah 2: Buka log error web server
  4. Langkah 3: Cari log PHP bila log web server kosong
  5. Langkah 4: Cocokkan pesan dengan penyebabnya
  6. Langkah 5: Uji perbaikan satu per satu
  7. Langkah 6: Matikan lagi mode debug
  8. Pesan error apa yang paling sering muncul?
  9. Pertanyaan yang sering diajukan
  10. Checklist singkat

Website tiba-tiba menampilkan "500 Internal Server Error" tanpa penjelasan apa pun? Itu memang sifat error 500: server tahu ada yang salah, tapi tidak memberi tahu pengunjung apa masalahnya.

Kabar baiknya, di website PHP hampir setiap error 500 meninggalkan jejak di log. Pengaturan produksi yang benar memang menyembunyikan detail error dari pengunjung (display_errors dimatikan), sehingga yang terlihat hanya halaman kosong atau pesan 500. Detailnya tersimpan di log, dan tugasmu adalah menemukannya. Langkah di bawah berlaku untuk WordPress, Laravel, CodeIgniter, maupun aplikasi PHP buatan sendiri.

Bagaimana cara melacak error 500?

Langkah 1: Catat waktu dan URL yang error

Sebelum membuka log apa pun, catat jam kejadian dan halaman yang error. Apakah semua halaman kena, atau hanya halaman tertentu seperti checkout atau dasbor admin? Error di semua halaman biasanya menunjuk ke konfigurasi global (.htaccess, versi PHP, file inti). Error di satu halaman menunjuk ke kode atau plugin tertentu.

Tanyakan juga: apa yang berubah terakhir kali? Update plugin, ganti versi PHP, upload file baru, atau edit konfigurasi hampir selalu menjadi tersangka utama.

Langkah 2: Buka log error web server

Lokasinya tergantung server:

  • Apache di Ubuntu dan Debian: /var/log/apache2/error.log
  • Apache di AlmaLinux dan Rocky Linux: /var/log/httpd/error_log
  • Nginx: /var/log/nginx/error.log, atau lokasi di direktif error_log pada konfigurasi situs
  • cPanel: menu Errors atau Metrics di panel, juga file error_log di folder website

Jalankan tail -n 50 pada file log, lalu ulangi akses ke halaman yang error dan lihat baris baru yang muncul. Panduan membaca log di cPanel ada di artikel membaca error log cPanel, sedangkan lokasi log Linux lainnya dirangkum di lokasi log penting di Linux.

Di Nginx dengan PHP-FPM, error PHP sering muncul di log Nginx dengan awalan FastCGI sent in stderr. Itu artinya pesan berasal dari PHP, bukan dari Nginx.

Langkah 3: Cari log PHP bila log web server kosong

Kalau log web server tidak mencatat detail, periksa ke mana PHP menulis error. Jalankan php -i | grep -E "error_log|log_errors" untuk melihat pengaturan PHP CLI, tetapi ingat bahwa PHP-FPM memakai file konfigurasi sendiri. Di konfigurasi pool PHP-FPM, cari baris php_admin_value[error_log] atau catch_workers_output.

Banyak framework juga punya log sendiri. WordPress menulis ke wp-content/debug.log bila WP_DEBUG_LOG diaktifkan (caranya ada di artikel debug mode WordPress). Laravel menulis ke storage/logs/laravel.log.

Langkah 4: Cocokkan pesan dengan penyebabnya

Setelah menemukan baris log yang tepat, sebagian besar penyebab langsung terlihat dari pesannya:

  • PHP Fatal error: Uncaught Error: Call to undefined function: fungsi tidak ada, biasanya ekstensi PHP belum dipasang (misalnya mysqli atau gd) atau kode memanggil fungsi yang sudah dihapus di versi PHP lebih baru.
  • Allowed memory size of ... bytes exhausted: skrip melewati memory_limit. Naikkan batasnya secukupnya, tapi juga cari kenapa skrip memakan memori sebanyak itu.
  • PHP Parse error: syntax error: ada salah tulis di kode, sering terjadi setelah mengedit file langsung di server.
  • Invalid command ... perhaps misspelled di log Apache: ada baris di .htaccess yang tidak dikenali, biasanya karena modul Apache yang dibutuhkan tidak aktif.
  • Permission denied: web server atau PHP tidak bisa membaca file. Di sebagian hosting yang menjalankan PHP sebagai pemilik akun, file atau folder dengan izin terlalu longgar (misalnya 777) justru ditolak dan menghasilkan 500.
  • Maximum execution time of ... seconds exceeded: skrip berjalan melewati batas max_execution_time.

Langkah 5: Uji perbaikan satu per satu

Lakukan satu perubahan, uji, lalu lanjut bila perlu. Untuk kesalahan sintaks, php -l namafile.php memeriksa sintaks sebuah file tanpa menjalankannya. Untuk dugaan plugin WordPress, ganti nama folder plugin yang dicurigai lewat File Manager supaya plugin itu nonaktif. Untuk dugaan .htaccess, ganti nama file sementara, lalu kembalikan setelah barisnya diperbaiki.

Bila error muncul setelah mengganti versi PHP, kembalikan dulu ke versi sebelumnya supaya website pulih, lalu cari kode yang tidak kompatibel. Artikel mengganti versi PHP di hosting dengan aman membahas urutan yang tepat.

Langkah 6: Matikan lagi mode debug

Kalau kamu sempat menyalakan display_errors atau WP_DEBUG_DISPLAY untuk melihat pesan langsung di browser, matikan lagi setelah selesai. Pesan error bisa membocorkan path folder, nama database, atau potongan kode ke siapa pun yang membuka halaman.

Pesan error apa yang paling sering muncul?

Pesan di logPenyebabTindakan pertama
Call to undefined functionEkstensi PHP hilang atau fungsi usangCek php -m, pasang ekstensi atau perbarui kode
Allowed memory size exhaustedmemory_limit terlampauiNaikkan batas secukupnya, cari proses yang boros
Parse error: syntax errorSalah tulis kodephp -l pada file yang disebut di log
Invalid command di .htaccessModul Apache tidak aktif atau salah tulisPerbaiki atau hapus baris tersebut
Permission deniedIzin atau pemilik file salahKembalikan izin file 644 dan folder 755
Maximum execution time exceededSkrip terlalu lamaOptimalkan proses atau pindahkan ke latar belakang

Pertanyaan yang sering diajukan

Kenapa error 500 tidak menampilkan pesan apa pun di browser?

Karena di server produksi display_errors sengaja dimatikan supaya detail teknis tidak terlihat pengunjung. Detail error tetap dicatat di log bila log_errors aktif.

Apakah error 500 bisa disebabkan database?

Bisa, misalnya bila koneksi database gagal dan aplikasi tidak menangani kegagalan itu dengan baik. Pada WordPress, gangguan database biasanya tampil sebagai pesan "Error establishing a database connection", bukan 500 polos.

Log error kosong padahal website error 500, kenapa?

Kemungkinan kamu membuka log yang salah, log_errors dimatikan, atau PHP-FPM menulis ke file lain. Periksa konfigurasi pool PHP-FPM dan lokasi error_log di konfigurasi situs.

Bolehkah saya mengatur izin file 777 supaya error hilang?

Jangan. Izin 777 membuat file bisa diubah siapa saja di server dan di sebagian hosting malah memicu error 500. Gunakan 644 untuk file dan 755 untuk folder, kecuali aplikasi mendokumentasikan kebutuhan lain.

Apa bedanya error 500 dengan 502?

500 berarti aplikasi gagal memproses permintaan. 502 berarti proxy seperti Nginx tidak mendapat jawaban sah dari backend, misalnya karena PHP-FPM mati.

Checklist singkat

  • Catat jam, URL, dan perubahan terakhir.
  • Baca log web server, lalu log PHP dan log framework.
  • Cocokkan pesan dengan penyebab, perbaiki satu hal per percobaan.
  • Uji ulang halaman yang error dan halaman lain yang penting.
  • Matikan kembali tampilan error di browser setelah selesai.

Sumber & referensi

Baca juga