Membaca dan Menulis File dengan PHP : Panduan disertai Studi Kasus

Tutorial103 Views

PHP dikenal luas sebagai bahasa pemrograman server-side yang populer untuk membangun aplikasi web dinamis. Namun, salah satu fitur yang sering diabaikan padahal sangat berguna adalah kemampuannya dalam file handling. Dengan PHP, kita bisa membaca file, menulis file, menambahkan data, bahkan menghapus file dengan mudah. Kemampuan ini membuat PHP sangat fleksibel untuk berbagai kebutuhan, mulai dari logging sederhana, penyimpanan data ringan, hingga manajemen file pada sistem yang lebih kompleks.

Artikel ini akan mengupas tuntas teknik dasar bekerja dengan file di PHP, disertai studi kasus nyata, sehingga pembaca bisa langsung mempraktikkannya pada proyek masing-masing.


Membaca File dengan PHP

Membaca file adalah pondasi utama dalam file handling. Saat aplikasi perlu menampilkan data dari sebuah file teks, misalnya daftar produk, catatan log, atau isi konfigurasi, PHP menyediakan berbagai fungsi bawaan yang bisa dipakai.

Beberapa fungsi populer:

  • fopen() → Membuka file dengan mode tertentu (membaca, menulis, atau gabungan).
  • fread() → Membaca isi file sesuai jumlah karakter yang ditentukan.
  • fgets() → Membaca isi file baris demi baris.
  • file_get_contents() → Membaca seluruh isi file sekaligus dalam bentuk string.

Contoh sederhana membaca file

<?php
$file = "data.txt";

// Membaca isi file dengan file_get_contents
$content = file_get_contents($file);
echo $content;
?>

Jika data.txt berisi teks, maka seluruh isi file tersebut akan ditampilkan. Fungsi file_get_contents() praktis untuk file kecil hingga menengah. Namun, untuk file besar, lebih baik gunakan fopen() dan fgets() agar lebih hemat memori.

Membaca baris demi baris

<?php
$file = fopen("data.txt", "r");
while (!feof($file)) {
    echo fgets($file) . "<br>";
}
fclose($file);
?>

Dengan pendekatan ini, file akan dibaca baris per baris, cocok untuk file log atau daftar panjang.


Menulis File dengan PHP

Selain membaca, PHP memungkinkan kita menulis file baru atau menimpa file yang sudah ada. Ini berguna untuk mencatat log aktivitas pengguna, menyimpan data input dari form, atau membuat laporan sederhana.

Fungsi utama untuk menulis file:

  • fopen() dengan mode w (write) → membuka file untuk ditulis (menimpa isi lama).
  • fwrite() → menulis string ke file.
  • file_put_contents() → cara cepat menulis file tanpa membuka dan menutup manual.

Contoh menulis file

<?php
$file = "data.txt";
$handle = fopen($file, "w"); // Mode 'w' menimpa isi file lama
fwrite($handle, "Halo, ini adalah data baru!");
fclose($handle);
?>

Setelah dijalankan, data.txt hanya akan berisi teks baru yang kita tuliskan. Jika file belum ada, PHP otomatis membuat file baru.

Cara cepat dengan file_put_contents()

<?php
file_put_contents("data.txt", "Teks singkat dengan cara mudah!");
?>

Sangat ringkas, cocok untuk penggunaan sederhana.


Menambahkan Data ke File dengan PHP

Ada kalanya kita tidak ingin menimpa file, melainkan menambahkan data baru di bagian akhir. PHP mendukung ini dengan mode a (append) pada fopen(), atau menggunakan konstanta FILE_APPEND pada file_put_contents().

Contoh menggunakan fopen()

<?php
$file = "data.txt";
$handle = fopen($file, "a"); // Mode append
fwrite($handle, "\nBaris tambahan baru.");
fclose($handle);
?>

Jika file sebelumnya berisi teks lama, maka baris baru akan ditambahkan di akhir file tanpa menghapus data lama.

Contoh dengan file_put_contents()

<?php
file_put_contents("data.txt", "\nTambahan data dengan mudah!", FILE_APPEND);
?>

Sangat berguna untuk aplikasi logging, komentar, atau catatan yang terus bertambah.


Menghapus File dengan PHP

Menghapus file sama pentingnya dengan menulis file, terutama ketika kita ingin membersihkan file sementara atau mengelola file yang sudah tidak dibutuhkan.

Fungsi utamanya adalah unlink().

Contoh sederhana

<?php
$file = "hapus.txt";

if (file_exists($file)) {
    unlink($file);
    echo "File berhasil dihapus.";
} else {
    echo "File tidak ditemukan.";
}
?>

Selalu baik untuk mengecek keberadaan file dengan file_exists() agar script tidak error.


Studi Kasus Praktis

Untuk memperjelas implementasi, mari kita bahas beberapa studi kasus yang umum ditemui.


Studi Kasus 1: Sistem Log Aktivitas Pengguna

Setiap kali user login ke aplikasi, kita ingin mencatat aktivitasnya (username, IP address, waktu login).

<?php
session_start();
$user = "admin";
$ip   = $_SERVER['REMOTE_ADDR'];
$time = date("Y-m-d H:i:s");

$log = "User: $user | IP: $ip | Waktu: $time\n";
file_put_contents("log.txt", $log, FILE_APPEND);

echo "Login berhasil. Aktivitas dicatat.";
?>

File log.txt akan terus bertambah setiap kali ada user login.


Studi Kasus 2: Formulir Komentar

Misalnya kita ingin membuat sistem komentar sederhana tanpa database.

Simpan komentar ke file:

<?php
if (isset($_POST['komentar'])) {
    $komentar = htmlspecialchars($_POST['komentar']);
    file_put_contents("komentar.txt", $komentar . "\n", FILE_APPEND);
    echo "Komentar berhasil disimpan!";
}
?>

Tampilkan komentar dari file:

<?php
if (file_exists("komentar.txt")) {
    $isi = file("komentar.txt", FILE_IGNORE_NEW_LINES);
    foreach ($isi as $baris) {
        echo "<p>" . $baris . "</p>";
    }
}
?>

Ini bisa dipakai untuk blog kecil atau prototipe aplikasi.


Studi Kasus 3: Upload File dan Simpan Log

Form HTML untuk upload:

<form action="upload.php" method="post" enctype="multipart/form-data">
    Pilih file untuk diupload:
    <input type="file" name="fileUpload">
    <input type="submit" value="Upload">
</form>

Script upload.php:

<?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileUpload"]["name"]);

if (move_uploaded_file($_FILES["fileUpload"]["tmp_name"], $targetFile)) {
    echo "File berhasil diupload.";

    $log = "File diupload: " . $targetFile . " | " . date("Y-m-d H:i:s") . "\n";
    file_put_contents("upload_log.txt", $log, FILE_APPEND);
} else {
    echo "Gagal mengupload file.";
}
?>

Selain menyimpan file ke folder uploads/, kita juga membuat catatan aktivitas upload.


Studi Kasus 4: Hapus File Lama Otomatis

Agar server tidak penuh, kita bisa menghapus file yang sudah lebih dari 7 hari.

<?php
$folder = "uploads/";
$files = glob($folder . "*");

foreach ($files as $file) {
    if (is_file($file)) {
        if (time() - filemtime($file) > (7 * 24 * 60 * 60)) {
            unlink($file);
            echo "File $file dihapus.<br>";
        }
    }
}
?>

Sangat bermanfaat untuk aplikasi yang sering menerima upload.


Best Practice Keamanan dalam File Handling

Bekerja dengan file di PHP punya tantangan tersendiri, terutama soal keamanan. Tanpa validasi yang baik, aplikasi bisa menjadi target serangan, misalnya: upload file berbahaya, manipulasi path file, atau akses ilegal.

1. Validasi Input File

Selalu periksa ekstensi file sebelum diproses. Jangan izinkan upload file PHP atau script berbahaya.

<?php
$allowed = ['jpg', 'png', 'gif'];
$ext = pathinfo($_FILES["fileUpload"]["name"], PATHINFO_EXTENSION);

if (!in_array(strtolower($ext), $allowed)) {
    die("Ekstensi file tidak diizinkan!");
}
?>

2. Gunakan Direktori Terpisah untuk Upload

Simpan file upload di folder khusus (misalnya uploads/) dan hindari folder root aplikasi. Atur permission folder agar tidak bisa dieksekusi sebagai script.

3. Hindari file_put_contents() Tanpa Filter

Jika input user langsung ditulis ke file tanpa sanitasi, hacker bisa menyuntikkan script. Gunakan htmlspecialchars() atau validasi tambahan sebelum menyimpan.

4. Batasi Ukuran File

Gunakan $_FILES["fileUpload"]["size"] untuk memastikan file tidak terlalu besar.

<?php
if ($_FILES["fileUpload"]["size"] > 2000000) { // max 2MB
    die("Ukuran file terlalu besar!");
}
?>

5. Cek File dengan mime_content_type()

Selain mengecek ekstensi, periksa juga MIME type agar lebih aman.

<?php
$mime = mime_content_type($_FILES["fileUpload"]["tmp_name"]);
if (!in_array($mime, ['image/jpeg', 'image/png', 'image/gif'])) {
    die("Tipe file tidak valid!");
}
?>

6. Lindungi File Log

File log sering berisi data sensitif. Pastikan folder log tidak bisa diakses langsung dari URL. Gunakan .htaccess untuk mencegah akses publik.


Manfaat Menguasai File Handling

Menguasai teknik file handling di PHP membawa banyak keuntungan praktis:

  • Sistem sederhana tanpa database → cocok untuk aplikasi ringan.
  • Logging aktivitas → developer bisa melacak apa yang terjadi di sistem.
  • Penyimpanan sementara → misalnya saat memproses upload.
  • Backup data → file bisa dijadikan salinan cadangan sebelum masuk ke database.

Lebih dari itu, pemahaman ini akan menjadi bekal sebelum masuk ke sistem file handling yang lebih kompleks seperti manajemen dokumen, file storage cloud, atau integrasi dengan API eksternal.

Leave a Reply

Your email address will not be published. Required fields are marked *