Sebelum menjalankan aplikasi berbasis PHP di server, Anda perlu memastikan beberapa hal dulu: versi PHP yang terpasang, ekstensi apa saja yang aktif, dan berapa batas ukuran file yang boleh diunggah. Informasi ini sebenarnya sudah tersedia, tapi tersebar di banyak tempat — sebagian ada di php.ini, sebagian lagi hanya terlihat lewat panel hosting tertentu. Menelusurinya satu per satu memakan waktu, apalagi kalau Anda baru pertama kali mengelola server sendiri.

phpinfo adalah fungsi bawaan PHP yang meringkas seluruh informasi itu jadi satu halaman. Cukup panggil satu baris kode, dan Anda langsung mendapat gambaran lengkap konfigurasi PHP yang sedang berjalan di server Anda tanpa perlu membuka file konfigurasi satu per satu. Namun kemudahan ini punya sisi lain yang jarang disadari: halaman yang sama juga bisa dibaca siapa saja kalau dibiarkan terbuka di internet. Artikel ini membahas keduanya, mulai dari cara memakainya sampai cara mengamankannya.

Apa Itu phpinfo()?

phpinfo() adalah salah satu fungsi bawaan yang sudah tersedia begitu PHP terpasang di server — Anda tidak perlu menginstal apa pun tambahan untuk memakainya. Dokumentasi resmi PHP menuliskan sintaksnya sebagai phpinfo(int $flags = INFO_ALL): true, yang berarti fungsi ini selalu mengembalikan nilai true setelah menampilkan informasinya ke layar.

Cara kerjanya sederhana. Saat dipanggil, phpinfo() langsung mencetak output dalam format HTML berisi tabel-tabel konfigurasi yang mudah dibaca di browser. Ini berbeda kalau Anda menjalankannya lewat CLI (command line interface, antarmuka baris perintah) — dalam mode ini, keluarannya berupa teks polos tanpa format HTML sama sekali. Fungsi ini termasuk bagian dari bahasa PHP itu sendiri. Kalau Anda ingin memahami dasar-dasar PHP sebagai bahasa pemrograman server-side, phpinfo() adalah salah satu contoh paling konkret bagaimana PHP berkomunikasi langsung dengan lingkungan server tempatnya berjalan.

Informasi Apa Saja yang Ditampilkan phpinfo()?

Dokumentasi resmi PHP membagi keluaran phpinfo() ke beberapa kategori yang bisa dipanggil terpisah lewat parameter $flags. Anda tidak wajib menghafal semuanya, tapi memahami pembagian ini membantu Anda mencari informasi spesifik lebih cepat tanpa harus menggulir seluruh halaman.

  1. Informasi umum: versi PHP, tanggal build (proses kompilasi), sistem operasi server, dan lokasi file php.ini yang sedang dipakai.
  2. Konfigurasi: nilai lokal dan nilai master untuk setiap direktif PHP, misalnya upload_max_filesize atau max_execution_time.
  3. Modul: daftar ekstensi PHP yang sudah dimuat beserta pengaturannya masing-masing, seperti curl, mbstring, atau gd.
  4. Environment: variabel lingkungan sistem yang sedang aktif di server tempat PHP berjalan.
  5. Variabel bawaan: seluruh data EGPCS — singkatan dari Environment, GET, POST, Cookie, Server — yang tersedia pada permintaan saat itu.
  6. Kredit dan lisensi: informasi kontributor proyek PHP beserta lisensi resminya.

Semua kategori ini digabung secara default lewat flag INFO_ALL, sehingga saat Anda memanggil phpinfo() tanpa argumen, semuanya langsung tampil sekaligus. Poin keempat dan kelima layak Anda perhatikan lebih serius — variabel environment dan data EGPCS bisa memuat informasi yang jauh lebih sensitif daripada sekadar nomor versi PHP.

Enam kategori info phpinfo(): umum, konfigurasi, modul, environment (paling sensitif), variabel EGPCS, dan kredit-lisensi.
Enam kategori info phpinfo(): umum, konfigurasi, modul, environment (paling sensitif), variabel EGPCS, dan kredit-lisensi.

Kapan phpinfo() Berguna untuk Anda?

Sebagai pemula yang baru mengelola hosting atau VPS sendiri, ada beberapa situasi konkret di mana phpinfo() menjadi cara tercepat untuk cek versi PHP dan detail konfigurasi lain, dibanding menelusuri satu per satu lewat panel atau file konfigurasi.

  1. Memastikan versi PHP sebelum instal aplikasi: banyak CMS atau framework mencantumkan syarat minimum versi PHP. Daripada menebak, Anda bisa langsung melihat versi persis yang terpasang di baris pertama output phpinfo().
  2. Mengecek ekstensi yang aktif: aplikasi tertentu butuh ekstensi seperti curl untuk mengambil data dari API eksternal, atau mbstring untuk memproses teks multibyte. Kalau ekstensi itu tidak muncul di daftar modul, Anda tahu persis apa yang perlu diaktifkan.
  3. Mencari lokasi file php.ini: saat Anda perlu mengubah konfigurasi tapi tidak tahu file mana yang sedang dipakai server, baris "Loaded Configuration File" langsung menunjukkan path lengkapnya.
  4. Memverifikasi perubahan konfigurasi: setelah mengedit php.ini dan me-restart layanan, Anda bisa memanggil ulang phpinfo() untuk memastikan nilai barunya sudah benar-benar terbaca sistem, bukan hanya tersimpan di file.
  5. Memastikan versi PHP yang aktif di hosting berbeda dari versi default: hosting shared modern biasanya menyediakan beberapa versi PHP sekaligus lewat menu semacam "Select PHP Version". Output phpinfo() membuktikan versi mana yang benar-benar dipakai situs Anda saat ini, bukan sekadar versi yang Anda pilih di panel.

Lima kebutuhan ini menjadi alasan phpinfo() tetap dipakai sampai sekarang, meskipun sudah ada tool debugging lain yang lebih modern.

Cara Membuat dan Mengakses File phpinfo

Membuat halaman phpinfo() cukup dengan tiga baris kode PHP. Buat file baru — namai bebas, misalnya info.php — lalu isi dengan kode berikut:

PHP
<?php
phpinfo();

Setelah filenya siap, cara mengunggah dan mengaksesnya tergantung dari lingkungan yang Anda pakai.

Kalau Anda bekerja di hosting berbasis cPanel, unggah file tersebut ke folder public_html lewat File Manager atau FTP client. Setelah itu, akses lewat browser dengan format https://namadomain-anda.com/info.php. Kalau Anda masih belajar di lingkungan lokal, XAMPP adalah pilihan yang umum dipakai — cukup taruh filenya di folder htdocs, lalu buka lewat http://localhost/info.php. Kedua cara ini sama-sama langsung memunculkan seluruh output phpinfo() di browser tanpa langkah tambahan.

Kalau server Anda memakai panel selain cPanel, sebagian panel modern sudah menyediakan info PHP langsung dari dashboard tanpa Anda perlu membuat file sama sekali. Cek dulu menu semacam "PHP Configuration" atau "PHP Info" sebelum membuat file manual.

Kalau Anda punya akses SSH ke server — misalnya di VPS — Anda bahkan tidak perlu membuat file sama sekali. Jalankan php -i langsung dari terminal untuk melihat keluaran phpinfo() dalam format teks tanpa menyentuh browser. Cara ini juga lebih cepat kalau Anda hanya butuh satu nilai konfigurasi tertentu. Gabungkan dengan grep, misalnya:

Bash
php -i | grep memory_limit

Perintah di atas langsung menampilkan baris yang memuat memory_limit, tanpa Anda perlu menggulir ratusan baris output di browser untuk mencarinya secara manual.

Risiko Keamanan phpinfo() yang Sering Diabaikan

Informasi yang membuat phpinfo() berguna untuk debugging adalah persis informasi yang sama yang membuatnya berbahaya kalau dibiarkan terbuka. Ingat kategori environment dan variabel EGPCS yang dibahas sebelumnya — keduanya bisa memuat kredensial database, kunci API, atau path lengkap struktur folder server Anda, tergantung bagaimana variabel lingkungan dikonfigurasi.

Karena itu, industri keamanan mengklasifikasikan paparan phpinfo() sebagai kerentanan resmi bernama information disclosure (pembocoran informasi) dengan kode CWE-200, dan referensinya masuk ke standar OWASP Top 10 serta PCI-DSS. Ini bukan risiko teoretis. Beberapa kasus nyata membuktikan dampaknya:

  1. FacturaScripts (CVE-2026-42878): aplikasi manajemen bisnis open source ini punya endpoint installer yang menjalankan phpinfo() begitu parameter ?phpinfo=TRUE ditambahkan ke URL, tanpa memerlukan login sama sekali. Instalasi yang baru di-deploy dan belum dikonfigurasi penuh jadi target empuk, karena celah ini tetap terbuka selama proses instalasi belum selesai.
  2. Microsoft Graph PHP SDK (CVE-2023-49283): paket ini secara tidak sengaja menyertakan file uji GetPhpInfo.php yang bisa dieksekusi siapa saja kalau folder vendor aplikasi bisa diakses lewat web. Kesalahan konfigurasi seperti ini sebenarnya cukup umum terjadi di server produksi.
  3. ownCloud (CVE-2023-49103): kasus ini pernah kami bahas lebih detail di artikel ownCloud. Pustaka pihak ketiga di aplikasi graphapi membuka alamat yang menampilkan seluruh keluaran phpinfo() tanpa login, dan pada instalasi berbasis container, keluaran itu memuat kata sandi administrator serta kunci lisensi. Celah ini bahkan masuk katalog kerentanan yang aktif dieksploitasi milik CISA.

Ketiga kasus di atas punya pola yang sama: file debugging yang dibuat untuk kebutuhan sesaat, lalu terlupakan di server yang bisa diakses publik.

Alur risiko phpinfo: file debug dibuat, lupa dihapus, jadi bisa diakses publik, lalu kredensial server terbaca penyerang.
Alur risiko phpinfo: file debug dibuat, lupa dihapus, jadi bisa diakses publik, lalu kredensial server terbaca penyerang.

Cara Mengamankan atau Menghapus phpinfo() dengan Benar

Cara paling aman menangani file phpinfo() sebenarnya sederhana, meski sering diabaikan karena terasa merepotkan di tengah proses debugging.

  1. Hapus filenya begitu selesai dipakai: ini rekomendasi resmi dari basis data kerentanan keamanan, bukan mengganti nama ekstensi jadi .php_disabled atau semacamnya. Mengganti nama hanya menyembunyikan file dari akses langsung, padahal file itu tetap ada di server dan bisa ditemukan lewat pemindaian folder atau backup yang bocor.
  2. Batasi akses lewat konfigurasi server kalau file memang harus tetap ada untuk sementara, misalnya saat tim Anda masih butuh mengaksesnya berulang kali. Aturan di .htaccess bisa membatasi akses berdasarkan alamat IP tertentu, sehingga hanya perangkat yang Anda izinkan yang bisa membukanya.
  3. Nonaktifkan fungsinya lewat disable_functions di php.ini kalau server produksi Anda memang tidak pernah butuh phpinfo() dijalankan sama sekali. Direktif ini menerima daftar nama fungsi dipisah koma, dan sejak PHP 8.0 fungsi yang dinonaktifkan benar-benar dihapus definisinya, bukan sekadar diblokir saat dipanggil.
  4. Matikan expose_php di php.ini untuk mengurangi jejak yang bisa dibaca dari luar. Direktif ini defaultnya aktif dan menambahkan header X-Powered-By: PHP/x.x.x ke setiap respons — informasi kecil yang tetap membantu penyerang memetakan teknologi yang Anda pakai, sekalipun file phpinfo() sudah tidak ada.

Empat langkah ini tidak harus dipakai sekaligus. Untuk kebutuhan debugging sesaat, langkah pertama sudah cukup. Untuk server produksi yang Anda kelola jangka panjang, kombinasi langkah ketiga dan keempat memberi perlindungan yang lebih permanen.

Urutan prioritas mitigasi phpinfo(): hapus file, batasi via .htaccess, nonaktifkan disable_functions, matikan expose_php.
Urutan prioritas mitigasi phpinfo(): hapus file, batasi via .htaccess, nonaktifkan disable_functions, matikan expose_php.

Pertanyaan yang Sering Diajukan

Apakah phpinfo() aman dipakai di server produksi? Fungsinya sendiri aman — masalahnya ada di file yang tertinggal, bukan di fungsinya. Selama file berisi phpinfo() dihapus segera setelah selesai dipakai, tidak ada risiko yang tersisa. Yang berbahaya adalah membiarkannya bisa diakses publik dalam waktu lama, seperti tiga kasus CVE yang dibahas di atas.

Apakah phpinfo() sama dengan perintah untuk cek versi PHP? Tidak persis sama. Perintah php -v di terminal hanya menampilkan satu baris versi PHP. phpinfo() menampilkan seluruh konfigurasi termasuk versi, ekstensi, dan direktif — jauh lebih lengkap kalau Anda ingin cek versi PHP sekaligus detail lain di baliknya.

Bagaimana cara menghapus phpinfo() lewat cPanel? Buka File Manager, arahkan ke folder public_html, klik kanan pada file phpinfo Anda (misalnya info.php), lalu pilih Delete. Prosesnya sama seperti menghapus file lain — tidak ada menu khusus untuk fungsi ini.

Apa yang harus dilakukan kalau file phpinfo() tidak sengaja ter-upload ke server publik dalam waktu lama? Hapus filenya lebih dulu, lalu periksa access log server untuk melihat apakah ada permintaan mencurigakan ke file tersebut. Kalau ada indikasi file sempat diakses pihak luar, ganti kredensial database dan kunci API yang sempat terekspos di bagian environment, sebagai langkah pencegahan.

Kenapa output phpinfo() di CLI berbeda dengan di browser? Karena formatnya disesuaikan dengan medianya. Di browser, phpinfo() mencetak HTML lengkap dengan tabel berwarna. Dipanggil lewat CLI (php -i atau menjalankan skrip langsung dari terminal), keluarannya berupa teks polos tanpa format HTML — isinya sama, hanya cara penyajiannya yang beda.

Apakah menonaktifkan phpinfo() lewat disable_functions memengaruhi fungsi PHP lain? Tidak, selama Anda hanya menuliskan nama fungsi yang memang ingin dinonaktifkan. Direktif disable_functions bekerja per fungsi, jadi menonaktifkan phpinfo tidak memengaruhi fungsi PHP lainnya sama sekali.

Kesimpulan

phpinfo() adalah fungsi yang sangat membantu untuk memastikan versi PHP, ekstensi aktif, dan lokasi file konfigurasi server Anda, cukup dengan satu baris kode. Namun, informasi yang sama juga berisiko tinggi kalau file itu dibiarkan bisa diakses publik, karena bisa membocorkan kredensial dan detail infrastruktur server Anda. Gunakan phpinfo() saat Anda benar-benar membutuhkannya, lalu hapus filenya segera setelah selesai — atau nonaktifkan lewat disable_functions kalau server produksi Anda tidak pernah membutuhkannya. Semoga artikel ini membantu.