Membongkar cara PHP bekerja di balik layar: bahasa interpreted yang dieksekusi per-request, peran SAPI (mod_php vs PHP-FPM), alur kompilasi ke opcode oleh Zend Engine dengan JIT sejak 8.0, hingga komponen php, php.ini, dan php-fpm yang menyusun runtime produksi modern.

Di episode 1 kita memahami mengapa PHP ada. Sekarang kita masuk satu lapisan ke bawah: bagaimana PHP bekerja. Memahami arsitektur PHP penting karena banyak perilaku — dari kenapa PHP lambat di cold start, kenapa setiap request "lupa" variabel, sampai kenapa konfigurasi php.ini dan php-fpm sangat berpengaruh di produksi — semuanya berakar pada arsitektur ini.
Ini bukan teori kering. Ketika kalian melakukan tuning performa (episode 18) atau deployment PHP-FPM + Nginx (episode 19), kalian akan membaca log, mengubah konfigurasi, dan mendiagnosis masalah. Tanpa memahami model eksekusi PHP, semua itu terasa seperti menebak.
PHP tidak menghasilkan binary seperti C atau Go. Ia adalah bahasa interpreted: kode sumber .php dibaca, diterjemahkan, dan dieksekusi oleh interpreter setiap kali ada request. Ini adalah perbedaan fundamental yang menjelaskan banyak hal:
PHP bisa berdiri sendiri (CLI), tetapi di web ia harus disambungkan ke web server melalui SAPI (Server API). Dua SAPI utama yang kalian temui di dunia nyata:
| SAPI | Cara Kerja | Cocok Untuk |
|---|---|---|
mod_php (Apache) | PHP dimuat sebagai modul di dalam proses Apache | Setup sederhana, XAMPP/Laragon |
php-fpm (FastCGI) | PHP berjalan sebagai proses terpisah, web server bicara lewat FastCGI | Produksi, Nginx, scale-out, multi-version |
php-fpm adalah standar produksi modern: proses PHP terisolasi dari web server, konfigurasi pool per aplikasi, dan lebih mudah di-scale. Kita bahas tuntas di episode 19.
php)Binary command-line untuk menjalankan skrip tanpa web server:
php -S localhost:8000 -t publicphp -S menjalankan built-in web server — sempurna untuk development cepat di episode 3.
php.iniFile konfigurasi utama PHP. Lokasinya bisa dicek dengan:
php --ini
php -i | rg "memory_limit|upload_max_filesize"php --ini menampilkan file konfigurasi yang dimuat, dan php -i mencetak seluruh setting aktif. Beberapa directive yang sering diubah: memory_limit, upload_max_filesize, max_execution_time, dan display_errors.
Kode PHP tidak dieksekusi langsung. Zend Engine — inti PHP yang ditulis dalam C — meng-compile kode sumber menjadi opcode (instruksi tingkat rendah), lalu mengeksekusinya. Sejak PHP 8.0, ada JIT compiler yang meng-compile opcode yang sering dipakai menjadi machine code — pengaruh nyatanya terasa pada workload komputasi berat, bukan pada aplikasi web biasa yang didominasi I/O.
Alur lengkap satu request biasa:
php.ini, setup environment, autoload class.Kunci yang perlu diingat: langkah 1-2 dan 5 terjadi per request. Karena itu memanfaatkan opcache dan memakai worker yang efisien berdampak besar pada throughput.
Tip
Analoginya: PHP seperti dapur restoran yang bangun dari nol setiap kali ada tamu datang — menyiapkan alat (php.ini), membaca resep (kompilasi opcode), memasak (eksekusi), lalu membereskan semuanya. Opcache adalah "chef yang menyimpan resep di kepala" sehingga tidak perlu membaca ulang buku masak setiap tamu.
mod_php + Apache untuk produksi besar — memori Apache membesar karena PHP menempel di prosesnya; gunakan FPM.php.ini tanpa restart FPM — konfigurasi di-cache; selalu systemctl reload php8.5-fpm setelah perubahan.Sebelum men-debug, pastikan tahu runtime mana yang sedang dipakai — CLI dan FPM bisa membaca php.ini yang berbeda:
php -i | rg "Loaded Configuration File"
php -i | rg "PHP Version|Thread Safety"
php-fpm8.5 -i | rg "Loaded Configuration File"php -i menampilkan konfigurasi CLI; php-fpm8.5 -i menampilkan konfigurasi yang dipakai web server. Ketidaksinkronan di antara keduanya adalah penyebab umum "beda di terminal, beda di browser".
Inti yang harus dibawa pulang:
php-fpm adalah standar produksi modern.php (CLI), php-fpm, php.ini, dan Zend Engine yang meng-compile ke opcode (JIT sejak 8.0).Di episode 3 selanjutnya kita langsung praktik: instalasi PHP dan Hello World — menginstall PHP di Windows/macOS/Linux, menulis file .php pertama, dan menjalankannya dengan built-in web server php -S. Pastikan lingkungan kalian siap, karena mulai sekarang kita banyak mengetik!