Ada ironi kecil yang justru pas untuk pembuka: situs tempat Anda membaca ini punya Course PHP utuh, tetapi mesin latihan yang dipakai menulis Chapter ini tidak memasang PHP. Kondisi seperti itu bukan keanehan — justru wajah umum server produksi, tempat PHP sering tidak perlu terpasang kecuali aplikasi yang dilayani menuntutnya. Kita manfaatkan situasi ini untuk belajar hal yang jarang diajarkan: membaca keadaan package sebelum memasangnya, lewat apt-cache. Interpreter php, ekstensi, dan dependency manager Composer tetap kita bahas tuntas — dua blok contoh nyata diselingi konsep untuk bagian yang membutuhkan instalasi.
Interpreter PHP: Satu Bahasa, Beberapa Wujud #
Di Windows, PHP biasanya dijumpai sebagai satu file php.exe. Di Linux keluarga Debian, bahasa yang sama dipecah menjadi beberapa package sesuai perannya:
| Package | Wujud | Peran |
|---|---|---|
php-cli | binary php di PATH | menjalankan skrip di terminal dan web server bawaan |
php8.4-fpm | service php8.4-fpm | menjalankan PHP di balik nginx atau Apache lewat FastCGI |
php-mysql, php-xml, dan lainnya | modul .so | menambah kemampuan interpreter |
Pemecahan ini punya konsekuensi nyata: server produksi bisa memasang php8.4-fpm saja untuk melayani aplikasi, sementara workstation development memasang php-cli untuk mencoba potongan kode dari terminal. Debian 13 mengemas PHP 8.4 — nomor yang muncul berulang di nama-nama package di atas dan akan kita lihat lagi di output berikutnya.
Membaca Keadaan PHP Sebelum Instalasi #
Perintah php -v mencetak versi interpreter, tetapi perintah itu hanya berguna setelah PHP terpasang. Sebelum itu, apt-cache policy memborong informasi yang sama langsung dari metadata repository — tanpa menyentuh jaringan, tanpa perlu root:
apt-cache policy php-cliOutput yang Dihasilkan:
php-cli:
Installed: (none)
Candidate: 2:8.4+96
Version table:
2:8.4+96 500
500 http://deb.debian.org/debian trixie/main amd64 PackagesBedah empat kelompok barisnya:
php-cli:: judul package yang ditanyakan.Installed: (none): keadaan mesin ini — interpreter PHP memang belum terpasang, sebagaimana diceritakan di pembuka.Candidate: 2:8.4+96: versi yang akan dipasang bila kita menjalankanapt install. Angka8.4di tengah adalah versi PHP-nya; sisanya penanda pengemasan Debian.Version table: daftar versi tersedia beserta sumbernya —deb.debian.org/debian trixie/main, repositori utama Debian 13 yang kita kenal dari Chapter Package Manager Concepts .
Setelah sudo apt install php-cli, perintah php -v menjadi pengecekan pertama yang lazim. Sebagai contoh tampilan, output-nya di Debian 13 berbentuk seperti ini:
PHP 8.4.6 (cli) (built: Jun 10 2025 10:24:31) (NTS)
Copyright (c) PHP Group
Zend Engine v4.5.0, Copyright (c) Zend TechnologiesKata (cli) menegaskan binary ini berjalan sebagai CLI; mesin yang sama versinya di belakang php-fpm akan mencetak (fpm).
php CLI: Eksekusi Cepat tanpa Browser #
Kekuatan php-cli yang jarang dipakai pemula adalah mode inline: satu baris kode dieksekusi tanpa membuat file, seperti kalkulator yang paham PHP:
php -r 'echo PHP_VERSION, PHP_EOL;'
php -r 'echo strtoupper("belajar linux"), PHP_EOL;'Tanda kutip tunggal di kedua baris itu disengaja dan penting: variabel PHP ditulis dengan awalan $, dan kutip ganda akan membuat shell mengembangkan $... lebih dulu sebelum kode sampai ke PHP — perilaku yang kita bedah tuntas di Chapter Variables dan Quoting
. Untuk kode yang lebih panjang, file skrip adalah rumah yang tepat:
<?php
$belanja = ["beras", "gula", "teh"];
foreach ($belanja as $item) {
echo "- $item\n";
}
echo "Total item: ", count($belanja), PHP_EOL;Simpan sebagai cek.php lalu jalankan dengan php cek.php — output-nya daftar belanja beserta totalnya. Mode yang paling menolong saat membangun aplikasi web adalah built-in web server: satu perintah menjadikan folder kerja bisa diakses browser tanpa nginx maupun Apache:
php -S localhost:8000Sebagai contoh tampilan, log server development ini berbentuk seperti berikut saat sebuah permintaan diterima:
[Thu Jul 10 09:15:10 2025] [::1]:53424 Accepted
[Thu Jul 10 09:15:10 2025] [::1]:53424 [200]: GET /index.phpIa melayani file .php dari folder tempat ia dijalankan, mengumumkan alamatnya saat menyala (localhost:8000), mencatat setiap permintaan beserta kode statusnya, dan berhenti dengan Ctrl+C. Server ini hanya untuk development: satu perintah, satu user, tanpa konfigurasi produksi.
Ekstensi PHP: Kemampuan yang Dipasang Terpisah #
Interpreter PHP sengaja ramping; kemampuan seperti koneksi database atau pengolahan XML tinggal modul yang dipasang sebagai package terpisah. Pilihan yang paling sering dijumpai:
| Package | Modul yang dibawa | Dipakai saat |
|---|---|---|
php-mysql | mysqli, pdo_mysql | aplikasi berbasis MySQL/MariaDB |
php-xml | dom, simplexml, xmlwriter | mengolah dokumen XML |
php-mbstring | fungsi string multi-byte | teks UTF-8 dan bahasa non-Latin |
php-curl | curl | memanggil API lewat HTTP |
Keempatnya adalah extension package — dibangun mengikuti versi PHP rilis, sehingga kandidatnya selalu seirama dengan php-cli:
apt-cache policy php-mysql php-xml php-mbstringOutput yang Dihasilkan:
php-mysql:
Installed: (none)
Candidate: 2:8.4+96
Version table:
2:8.4+96 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
php-xml:
Installed: (none)
Candidate: 2:8.4+96
Version table:
2:8.4+96 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
php-mbstring:
Installed: (none)
Candidate: 2:8.4+96
Version table:
2:8.4+96 500
500 http://deb.debian.org/debian trixie/main amd64 PackagesKetiga package menunjukkan kandidat yang sama persis — pola khas ekstensi PHP di Debian: satu versi, satu kesatuan rilis. Setelah terpasang, dua perintah menjadi alat verifikasi utama: php -m mencetak seluruh modul yang aktif, dan php --ri curl menampilkan informasi runtime satu modul spesifik.
Composer: Dependency Manager untuk PHP #
Proyek PHP modern hampir selalu berdiri di atas pustaka pihak ketiga, dan Composer yang mengelolanya — peran yang sama seperti Maven untuk Java pada Chapter Java Development
, hanya konfigurasinya ditulis dalam JSON. File jantungnya bernama composer.json:
cat > composer.json << 'AKHIR'
{
"name": "budi/aplikasi-catatan",
"description": "Aplikasi pencatat sederhana",
"license": "MIT",
"require": {
"php": ">=8.2",
"monolog/monolog": "^3.7"
}
}
AKHIR
cat composer.json
jq '.require' composer.json
jq -r '.name' composer.jsonOutput yang Dihasilkan:
{
"name": "budi/aplikasi-catatan",
"description": "Aplikasi pencatat sederhana",
"license": "MIT",
"require": {
"php": ">=8.2",
"monolog/monolog": "^3.7"
}
}
{
"php": ">=8.2",
"monolog/monolog": "^3.7"
}
budi/aplikasi-catatanBedah bagian-bagiannya:
"name": "budi/aplikasi-catatan": identitas proyek dalam formatvendor/nama— pola yang sama dipakai semua paket Composer, termasuk dependensi di bawahnya."require"dengan dua kunci: daftar kebutuhan proyek. Kunciphpmenetapkan versi interpreter minimum (>=8.2), sedangkanmonolog/monologmeminta pustaka logging populer."monolog/monolog": "^3.7"dengan tanda sirkumfleks: caret constraint — versi yang diizinkan naik dalam batas kompatibel (3.7sampai sebelum4.0). Angka besar di kiri berarti batasnya.jq '.require' composer.json: memilih satu bagian dari JSON — alat pengolah JSON yang kita kenal baik, di sini dipakai membaca konfigurasi.jq -r '.name': flag-rmencetak nilai mentah tanpa tanda kutip, cocok untuk dipakai skrip lain.
Menjalankan composer install membuat Composer membaca file ini, mengunduh dependensi ke folder vendor/, lalu menulis composer.lock yang mencatat versi persis yang dipasang — file kunci yang wajib ikut disimpan agar seluruh tim dan server memakai versi sama. Di Debian, Composer tersedia sebagai package composer; pemasangan manual resminya berupa satu file composer.phar — arsip PHP yang bisa dieksekusi langsung. Panduan paket-paketnya di keluarga Debian terangkum di halaman PHP
wiki Debian.
php-fpm di Sisi Server #
Saat aplikasi beranjak dari laptop ke server, peran interpreter pindah dari php-cli ke php-fpm — FastCGI Process Manager yang memelihara kumpulan worker PHP. Web server menerima permintaan, meneruskan file .php ke socket milik pool worker (di Debian pool bawaannya dijalankan sebagai user www-data), lalu mengirimkan hasilnya kembali ke klien. Detail konfigurasinya — dari pool sampai integrasi virtual host — adalah bahasan sisi server di Chapter Apache HTTP Server
dan nginx
.
Dari sisi workstation, bekal kita kini lengkap: interpreter bisa diperiksa keadaannya sebelum dipasang, skrip dijalankan dari terminal, web server kecil menyala dengan satu perintah, dan dependensi terkelola lewat Composer. Bahasa berikutnya meninggalkan dunia interpreter sepenuhnya — compiler modern dengan build system terpadu menanti di Chapter Rust Development .