Kemampuan PHP tidak berhenti pada bahasanya: fungsi cURL untuk mengakses API, mbstring untuk teks UTF-8, PDO untuk database — semuanya disediakan oleh extension, modul-modul yang dapat dipasang atau dilepas dari interpreter. Memahami cara mengelola extension adalah keterampilan harian pengembang PHP karena hampir semua proyek nyata bergantung pada beberapa di antaranya. Pada chapter ini kita akan melihat extension apa saja yang aktif, memeriksa satu extension tertentu dari dalam skrip, dan memahami dua mekanisme pengaktifannya.
Melihat Extension yang Aktif #
Perintah php -m mencetak seluruh extension yang sedang dimuat, satu nama per baris:
php -mOutput yang Dihasilkan:
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gmp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
random
redis
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]Daftar di atas berasal dari komputer tempat materi ini ditulis, jadi isinya akan berbeda di instalasi Anda — itulah justru gunanya perintah ini. Header [PHP Modules] dan [Zend Modules] memisahkan extension biasa dari extension tingkat mesin Zend (seperti OPcache) yang berinteraksi lebih dalam dengan interpreter. Untuk mencari satu nama dengan cepat, gabungkan dengan grep:
php -m | grep -i curlOutput yang Dihasilkan:
curlKeluaran kosong berarti extension tersebut tidak aktif. Dari dalam skrip, informasi yang sama tersedia melalui fungsi get_loaded_extensions() yang mengembalikan array berisi nama semua extension:
<?php
$ekstensi = get_loaded_extensions();
echo "Jumlah extension aktif: " . count($ekstensi) . "\n";
echo "Lima yang pertama : " . implode(", ", array_slice($ekstensi, 0, 5)) . "\n";Output yang Dihasilkan:
Jumlah extension aktif: 46
Lima yang pertama : Core, date, libxml, json, pcreMemeriksa Extension Tertentu #
Saat menulis skrip yang bergantung pada sebuah extension, jangan menebak — periksalah dengan fungsi extension_loaded() yang mengembalikan true atau false:
<?php
var_dump(extension_loaded("pdo_sqlite"));
var_dump(extension_loaded("mbstring"));
var_dump(extension_loaded("intl"));Output yang Dihasilkan:
bool(true)
bool(true)
bool(false)Pada lingkungan penulisan materi ini, pdo_sqlite dan mbstring aktif sedangkan intl tidak — dan skrip yang membutuhkan intl akan gagal di lingkungan tersebut. Pemeriksaan seperti ini biasa dirangkai menjadi laporan kecil dengan foreach dan format printf():
<?php
$daftarEkstensi = [
'pdo_sqlite' => 'basis data SQLite melalui PDO',
'mbstring' => 'pengolahan teks multibyte (UTF-8)',
'curl' => 'permintaan HTTP ke API eksternal',
];
foreach ($daftarEkstensi as $ekstensi => $kegunaan) {
$status = extension_loaded($ekstensi) ? 'aktif' : 'tidak aktif';
printf("%-12s : %-12s (%s)\n", $ekstensi, $status, $kegunaan);
}Output yang Dihasilkan:
pdo_sqlite : aktif (basis data SQLite melalui PDO)
mbstring : aktif (pengolahan teks multibyte (UTF-8))
curl : aktif (permintaan HTTP ke API eksternal)Program di atas memetakan nama extension ke kegunaannya lewat array asosiatif, mengulanginya dengan foreach, lalu mencetak status dari extension_loaded() dengan format rata kiri selebar 12 karakter. Berkas cek-ekstensi.php pada bagian bawah halaman memperluas pola yang sama menjadi pemeriksaan lima extension umum, lengkap dengan judul dan garis pemisah — cocok dijalankan setiap kali Anda pindah ke komputer baru. Untuk memeriksa fitur yang lebih spesifik, gunakan function_exists() atau class_exists():
<?php
var_dump(function_exists("curl_init"));
var_dump(class_exists("PDO"));Output yang Dihasilkan:
bool(true)
bool(true)Cara Extension Diaktifkan #
Ada dua model extension di dunia PHP. Model pertama adalah compiled in: extension dikompilasi menjadi bagian dari binary php itu sendiri, selalu aktif, dan tidak dapat dilepas. Model kedua adalah dynamic: extension hidup sebagai berkas terpisah — .so di Linux/macOS dan .dll di Windows — dan diaktifkan lewat direktif extension= pada php.ini:
extension=curl
extension=mbstring
; gd sengaja tidak diaktifkan
; extension=gdSetiap baris extension=nama memerintahkan PHP memuat berkas nama.so dari direktori extension_dir (atau nama.dll di Windows) saat interpreter dinyalakan. Menghapus atau menambahkan komentar ; di depan baris tersebut cukup untuk menonaktifkan atau mengaktifkannya, diikuti restart PHP bila berjalan sebagai layanan web. Nama pada php.ini untuk extension dinamis memang ditulis tanpa awalan php_ — curl, bukan php-curl; nama paketnya saja yang memakai awalan itu di Ubuntu.
Cara memasang berkas extension-nya sendiri bergantung sistem operasi. Di Ubuntu/Debian, memasang paket seperti php-curl otomatis menempatkan berkas curl.ini di /etc/php/8.4/mods-available/ lalu menautkannya ke direktori conf.d tiap SAPI melalui perintah phpenmod curl (dan melepasnya dengan phpdismod). Di Windows ZIP manual, Anda cukup menghapus tanda ; pada baris extension= yang sesuai di php.ini — berkas DLL-nya sudah disertakan dalam paket. Di Homebrew macOS, extension populer sudah dikompilasi masuk sehingga umumnya tidak perlu langkah tambahan. Untuk extension dari ekosistem PECL yang tidak dibawa distributor, tersedia perintah pecl install nama — jalur yang dibahas dokumentasi PECL php.net
.
Flag -d juga dapat memuat extension untuk satu eksekusi saja, misalnya php -d extension=gd skrip.php. Bila berkas extension tidak ditemukan, PHP mencetak peringatan PHP Startup: Unable to load dynamic library — kita akan membedah penanganannya pada Chapter Mengatasi Masalah Instalasi
.
Extension yang Sering Dibutuhkan #
| Extension | Kegunaan | Paket Ubuntu |
|---|---|---|
mbstring | String multibyte, wajib untuk UTF-8 | php-mbstring |
curl | Permintaan HTTP ke API | php-curl |
dom, simplexml | Parsing XML/HTML | php-xml |
pdo_sqlite | Database SQLite via PDO | php-sqlite3 |
pdo_mysql | Database MySQL/MariaDB via PDO | php-mysql |
gd | Pengolahan gambar | php-gd |
zip | Arsip ZIP | php-zip |
intl | Internationalization (ICU) | php-intl |
Tabel di atas sekaligus menjadi daftar belanja saat Anda menyiapkan proyek baru: pasang yang dibutuhkan, verifikasi dengan php -m, lalu jalankan pemeriksaan extension_loaded() bila program bergantung padanya.
Ringkasan #
php -m dan get_loaded_extensions() menampilkan extension aktif, extension_loaded() memeriksa satu nama secara pasti, dan function_exists()/class_exists() menguji fitur spesifik. Extension aktif melalui dua jalur — dikompilasi langsung atau dimuat lewat direktif extension= — dengan pemasangan berkas yang disederhanakan package manager tiap sistem operasi. Perkakas lunak sudah lengkap; tinggal satu lagi yang perlu disiapkan: tempat menulis kode yang nyaman.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
cek-ekstensi.php
Unduh berkas<?php
// cek-ekstensi.php — memeriksa ketersediaan beberapa ekstensi umum
$daftarEkstensi = [
'pdo_sqlite' => 'basis data SQLite melalui PDO',
'mbstring' => 'pengolahan teks multibyte (UTF-8)',
'curl' => 'permintaan HTTP ke API eksternal',
'gd' => 'pembuatan dan pengolahan gambar',
'zip' => 'membaca dan membuat arsip ZIP',
];
echo "Pemeriksaan ekstensi PHP\n";
echo str_repeat('-', 44), "\n";
foreach ($daftarEkstensi as $ekstensi => $kegunaan) {
$status = extension_loaded($ekstensi) ? 'aktif' : 'tidak aktif';
printf("%-12s : %-12s (%s)\n", $ekstensi, $status, $kegunaan);
}