Belajar PHP Lengkap — Dari Dasar Sampai Produksi
Sejarah, sintaks, form & session, OOP, PDO, keamanan, Composer, testing, dan deployment — semua disajikan praktis untuk dipelajari dan diposting di blog.
1. Pengantar & Sejarah
PHP (Hypertext Preprocessor) dibuat oleh Rasmus Lerdorf (1994) sebagai kumpulan skrip untuk memantau kunjungan laman. Evolusi: PHP/FI → PHP 3 → PHP 4 → PHP 5 → PHP 7 → PHP 8. Versi modern (PHP 7/8) fokus ke performa, tipe data, dan fitur OOP lebih baik.
2. Instalasi & Lingkungan Pengembangan
Opsi cepat: XAMPP / Laragon / MAMP atau gunakan Docker untuk lingkungan yang konsisten. Untuk produksi gunakan PHP-FPM + Nginx.
# cek versi PHP
php -v
# jalankan built-in server untuk folder 'public'
php -S localhost:8000 -t public/
Tip: selalu gunakan PHP 8.x untuk fitur modern dan performa terbaik.
3. Sintaks Dasar
File PHP berekstensi .php. Kode PHP ditempatkan di antara tag <?php ?>.
<?php
// cetak teks
echo "Halo, PHP!";
// variabel
$nama = "Andi";
$umur = 20;
// fungsi sederhana
function sapa($n) {
return "Halo, " . htmlspecialchars($n);
}
echo sapa($nama);
?>
Catatan singkat: gunakan htmlspecialchars() ketika menampilkan input user ke HTML.
4. Form & Input Handling
Gunakan $_GET & $_POST. Selalu validasi & sanitasi input.
<!-- form.html -->
<form action="submit.php" method="post">
<input type="text" name="nama" required>
<button type="submit">Kirim</button>
</form>
<?php
// submit.php
$nama = filter_input(INPUT_POST, 'nama', FILTER_SANITIZE_STRING);
echo "Halo, " . htmlspecialchars($nama);
?>
5. Session & Cookie
Session menyimpan data di server, cookie di browser. Mulailah session sebelum output.
<?php
session_start();
$_SESSION['user'] = 'andi';
// baca session
if (isset($_SESSION['user'])) {
echo 'Halo, ' . htmlspecialchars($_SESSION['user']);
}
?>
Untuk keamanan, set cookie attributes: HttpOnly, Secure, dan gunakan SameSite.
6. OOP di PHP (Class, Inheritance, Trait, Interface)
PHP mendukung OOP lengkap: visibility, constructor, type hints, interface & trait.
<?php
class Produk {
private string $nama;
private float $harga;
public function __construct(string $nama, float $harga){
$this->nama = $nama;
$this->harga = $harga;
}
public function getNama(): string {
return $this->nama;
}
public function getHarga(): float {
return $this->harga;
}
}
$p = new Produk('Buku', 75000.0);
echo $p->getNama(); // Buku
?>
Gunakan type hints dan declare(strict_types=1) untuk kode yang lebih aman.
7. Database: Koneksi Aman dengan PDO
Jangan pakai query langsung. Gunakan PDO + prepared statements.
<?php
$dsn = 'mysql:host=localhost;dbname=belajar;charset=utf8mb4';
$user = 'root'; $pass = '';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
error_log($e->getMessage());
echo 'Terjadi kesalahan koneksi';
}
?>
ERRMODE_EXCEPTION dan jangan tampilkan pesan error DB ke user.8. Upload & File Handling
Validasi tipe & ukuran file, simpan di folder yang aman, dan jangan simpan nama asli file langsung ke DB tanpa sanitasi.
<?php
// proses upload sederhana
if (isset($_FILES['foto'])) {
$file = $_FILES['foto'];
$allowed = ['image/jpeg','image/png'];
if (in_array($file['type'], $allowed) && $file['size'] < 2_000_000) {
$name = uniqid('img_') . '-' . basename($file['name']);
move_uploaded_file($file['tmp_name'], __DIR__ . '/uploads/' . $name);
echo 'Upload berhasil';
} else {
echo 'Tipe/ukuran file tidak sesuai';
}
}
?>
9. Keamanan Aplikasi
- SQL Injection: gunakan prepared statements (PDO).
- XSS: gunakan
htmlspecialchars()saat output user. - CSRF: gunakan token CSRF di form.
- Password: simpan dengan
password_hash()dan verifikasi denganpassword_verify(). - Rate limiting & Brute force: batasi percobaan login.
<?php
// contoh hash password
$hash = password_hash('rahasia123', PASSWORD_DEFAULT);
// verifikasi
if (password_verify($inputPassword, $hash)) {
// login
}
?>
display_errors di lingkungan produksi dan gunakan HTTPS.10. Composer & PSR (Autoloading)
Composer adalah dependency manager; gunakan PSR-4 untuk autoloading. Contoh instal paket dan autoload:
# instal paket
composer require vlucas/phpdotenv
# contoh composer.json (PSR-4)
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
11. Debugging & Testing
Gunakan Xdebug untuk debug, PHPUnit untuk unit test, dan static analysis (PHPStan / Psalm) untuk kode lebih sehat.
12. Deployment & Performance
- Gunakan PHP-FPM + Nginx / Apache + PHP-FPM untuk produksi.
- Aktifkan OPcache untuk caching bytecode.
- Gunakan load balancer & autoscaling untuk trafik besar.
- Monitoring: New Relic, Sentry, atau Prometheus + Grafana.
13. Studi Kasus & Latihan (CRUD Sederhana)
Latihan 1: Buat aplikasi CRUD sederhana untuk Produk menggunakan PDO, prepared statements, dan session untuk autentikasi. Berikut struktur file direkomendasikan:
public/index.phpsrc/Database.phpsrc/ProductController.phptemplates/*
// contoh koneksi sederhana (src/Database.php)
<?php
class Database {
private static $pdo;
public static function getConnection() {
if (!self::$pdo) {
self::$pdo = new PDO('mysql:host=localhost;dbname=belajar;charset=utf8mb4', 'root', '', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
}
return self::$pdo;
}
}
?>
- Implementasikan halaman list, create (form), edit, delete.
- Amankan semua input dan gunakan CSRF token.
- Tambahkan fitur upload gambar dengan validasi.
14. Sumber & Best Practice
- php.net (dokumentasi resmi)
- PSR Standards (PHP-FIG): PSR-1, PSR-4, PSR-12
- Composer, PHPStan / Psalm, PHPUnit, Xdebug
- Keamanan: OWASP Top 10
Catatan: ganti semua placeholder https://YOUR-BLOG-URL/... dengan URL dan aset blog Anda. Untuk versi PDF, gunakan Print → Save as PDF.
No comments:
Post a Comment