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:

PackageWujudPeran
php-clibinary php di PATHmenjalankan skrip di terminal dan web server bawaan
php8.4-fpmservice php8.4-fpmmenjalankan PHP di balik nginx atau Apache lewat FastCGI
php-mysql, php-xml, dan lainnyamodul .somenambah 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:

bash
apt-cache policy php-cli

Output yang Dihasilkan:

text
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 Packages

Bedah empat kelompok barisnya:

  1. php-cli:: judul package yang ditanyakan.
  2. Installed: (none): keadaan mesin ini — interpreter PHP memang belum terpasang, sebagaimana diceritakan di pembuka.
  3. Candidate: 2:8.4+96: versi yang akan dipasang bila kita menjalankan apt install. Angka 8.4 di tengah adalah versi PHP-nya; sisanya penanda pengemasan Debian.
  4. 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:

text
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 Technologies

Kata (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:

bash
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
<?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:

bash
php -S localhost:8000

Sebagai contoh tampilan, log server development ini berbentuk seperti berikut saat sebuah permintaan diterima:

text
[Thu Jul 10 09:15:10 2025] [::1]:53424 Accepted
[Thu Jul 10 09:15:10 2025] [::1]:53424 [200]: GET /index.php

Ia 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:

PackageModul yang dibawaDipakai saat
php-mysqlmysqli, pdo_mysqlaplikasi berbasis MySQL/MariaDB
php-xmldom, simplexml, xmlwritermengolah dokumen XML
php-mbstringfungsi string multi-byteteks UTF-8 dan bahasa non-Latin
php-curlcurlmemanggil API lewat HTTP

Keempatnya adalah extension package — dibangun mengikuti versi PHP rilis, sehingga kandidatnya selalu seirama dengan php-cli:

bash
apt-cache policy php-mysql php-xml php-mbstring

Output yang Dihasilkan:

text
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 Packages

Ketiga 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:

bash
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.json

Output yang Dihasilkan:

text
{
    "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-catatan

Bedah bagian-bagiannya:

  1. "name": "budi/aplikasi-catatan": identitas proyek dalam format vendor/nama — pola yang sama dipakai semua paket Composer, termasuk dependensi di bawahnya.
  2. "require" dengan dua kunci: daftar kebutuhan proyek. Kunci php menetapkan versi interpreter minimum (>=8.2), sedangkan monolog/monolog meminta pustaka logging populer.
  3. "monolog/monolog": "^3.7" dengan tanda sirkumfleks: caret constraint — versi yang diizinkan naik dalam batas kompatibel (3.7 sampai sebelum 4.0). Angka besar di kiri berarti batasnya.
  4. jq '.require' composer.json: memilih satu bagian dari JSON — alat pengolah JSON yang kita kenal baik, di sini dipakai membaca konfigurasi.
  5. jq -r '.name': flag -r mencetak 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 .