Bagaimana cara memicu 500 Internal Server Error atau 404 Halaman Tidak Ditemukan kesalahan Apache di PHP?
Untuk 500 Internal Server Error saya telah mencoba kode berikut:
header("HTTP/1.0 500 Internal Server Error");
Tapi itu menunjukkan saya halaman kosong. Bagaimana cara menampilkan kesalahan dalam format default Apache?
Mohon panduannya..
Anda bisa menyalin dokumen kesalahan Apache ke dalam root web Anda (atau menautkannya) dan menggunakan header()
untuk mengatur kode kesalahan dan dengan dokumen tersebut sebagai keluaran. Itu mungkin yang terbaik kecuali Anda memiliki alasan kuat untuk tidak melakukannya. Tetapi jika itu tidak berhasil untuk Anda, ada beberapa alternatif (meskipun, alternatif yang tidak aman).
Untuk 500, cukup letakkan bug dalam kode Anda.
<?php throw new Exception('Nooooooooooooooo!'); ?>
Skrip PHP akan memunculkan pengecualian, menghasilkan halaman kesalahan Apache 500 biasa. (Namun perlu diketahui bahwa ini hanya akan mengakibatkan kesalahan Apache jika pengaturan init PHP display_errors
diatur ke 0
. Pada sebagian besar konfigurasi pengembangan, hal ini tidak terjadi. Pada sebagian besar konfigurasi produksi, hal ini terjadi. Jika Anda tidak mengetahui pengaturan server produksi Anda, Anda hanya perlu mengujinya untuk mengetahui apakah pengaturan tersebut berfungsi atau tidak).
Untuk 404, menurut saya hal terbaik yang bisa Anda lakukan adalah mengalihkan ke halaman yang tidak ada. Ini bukan hal yang persis sama, tetapi mungkin bisa dilakukan untuk tujuan Anda.
<?php header("Location: /i-dont-think-therefore-i-am-not"); ?>
Di sebagian besar browser, pengguna tidak akan benar-benar melihat pengalihan tersebut, mereka hanya akan secara diam-diam dan cepat dialihkan ke halaman yang tidak ada, yang mengakibatkan kesalahan Apache 404 biasa. Tentu saja, url-nya akan berubah dan beberapa pengguna mungkin akan menyadarinya. Jika hal itu tidak dapat diterima, Anda mungkin dapat mencapai hasil yang serupa dengan menggunakan Apache mod_rewrite untuk menulis ulang backend url ke lokasi yang tidak ada.
Untuk menanggapi beberapa komentar: Menetapkan kode respons melalui header()
(atau cara lain) tidak akan menghasilkan dokumen kesalahan Apache standar. Ini hanya akan mengembalikan kode respons tersebut dengan keluaran Anda sendiri. Ini adalah perilaku yang disengaja, yang dirancang agar Anda dapat memiliki dokumen kesalahan khusus, atau mengatur kode respons seperti yang ditentukan oleh spesifikasi HTTP pada permintaan apa pun. Jika Anda menginginkan dokumen kesalahan Apache, Anda harus memalsukannya (sesuai saran awal saya untuk menyalin dokumen kesalahan ke root web Anda), atau Anda harus mengelabui Apache untuk mengembalikannya (sesuai saran cadangan saya).
Setelah diskusi yang penuh dengan pengetahuan, saya pikir tidak ada kode php yang dapat menampilkan 500 Internal Server Error secara default. Solusinya adalah:
Buatlah folder dengan nama http500 di sebelah file php.
Buat file .htaccess di dalamnya dan tambahkan kode berikut:
Kode pengalihan PHP:
header('lokasi : http500/');
Rupanya ada sebuah fungsi yang disebut http_response_code yang memungkinkan Anda untuk mengatur kode respons dengan tepat. Jika itu tidak berhasil (ada catatan dalam dokumentasi tentang hal ini mungkin hanya ada di SVN) maka fungsi header
dapat mengambil argumen kode respons opsional:
header("HTTP/1.0 ...", true, 404);
Hal ini akan memberi sinyal kepada Apache dengan benar.