Selamat datang di part 63 dari seri tutorial Tutorial Pemrograman! Di part sebelumnya, kita telah menjelajahi PHP Generators untuk iterasi memori efisien pada dataset besar. Sekarang, kita akan mempelajari SplFileObject, sebuah kelas yang sangat powerful untuk manipulasi file di PHP. Dengan SplFileObject, Anda dapat membaca, menulis, dan memodifikasi file dengan lebih efisien dan terstruktur.
Prasyarat:
fopen, fwrite, fread, fclose).SplFileObject adalah bagian dari Standard PHP Library (SPL) yang menyediakan antarmuka berorientasi objek untuk berinteraksi dengan file. Bayangkan SplFileObject sebagai alat serbaguna yang memungkinkan Anda melakukan berbagai operasi pada file tanpa harus berurusan dengan kompleksitas manajemen sumber daya secara manual.
Analogi Dunia Nyata: Anggap saja Anda memiliki dokumen besar (file). SplFileObject adalah semacam editor canggih yang memungkinkan Anda membuka dokumen, membaca baris per baris, menulis perubahan, mencari teks tertentu, dan banyak lagi – semua dengan cara yang terstruktur dan mudah dikelola.
Mari kita lihat beberapa contoh kode penggunaan SplFileObject.
<?php
// Path ke file yang akan dibaca
$filePath = 'data.txt';
// Membuat instance SplFileObject
$file = new SplFileObject($filePath);
// Loop melalui setiap baris file
while (!$file->eof()) {
echo $file->fgets() . "<br>";
}
// Menutup file (opsional, akan otomatis ditutup ketika objek dihancurkan)
$file = null;
?>
Penjelasan:
$filePath: Variabel yang menyimpan path ke file yang ingin kita baca.$file = new SplFileObject($filePath): Membuat instance dari kelas SplFileObject, membuka file yang ditentukan.while (!$file->eof()): Loop yang berjalan selama belum mencapai akhir file (end-of-file).$file->fgets(): Membaca satu baris dari file.$file = null: Menghapus referensi ke objek, yang secara otomatis menutup file.
<?php
// Path ke file yang akan ditulis
$filePath = 'output.txt';
// Membuat instance SplFileObject dengan mode tulis ('w')
$file = new SplFileObject($filePath, 'w');
// Menulis beberapa baris ke file
$file->fwrite("Baris pertama\n");
$file->fwrite("Baris kedua\n");
$file->fwrite("Baris ketiga\n");
// Menutup file (opsional)
$file = null;
?>
Penjelasan:
$file = new SplFileObject($filePath, 'w'): Membuat instance SplFileObject dan membuka file dalam mode tulis ('w'). Mode 'w' akan menimpa file jika sudah ada, atau membuat file baru jika belum ada.$file->fwrite("..."): Menulis string ke file. \n adalah karakter newline (baris baru).
<?php
// Path ke file CSV
$filePath = 'data.csv';
// Membuat instance SplFileObject
$file = new SplFileObject($filePath);
// Mengatur delimiter dan enclosure (opsional)
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';', '"', '\\');
// Loop melalui setiap baris CSV
foreach ($file as $row) {
if ($row) { // Memastikan baris tidak kosong
print_r($row); // Menampilkan data CSV sebagai array
}
}
// Menutup file (opsional)
$file = null;
?>
Penjelasan:
$file->setFlags(SplFileObject::READ_CSV): Mengatur flag untuk membaca file sebagai file CSV.$file->setCsvControl(';', '"', '\\'): Mengatur delimiter (pemisah kolom), enclosure (karakter pembungkus string), dan escape character (karakter escape) yang digunakan dalam file CSV. Dalam contoh ini, delimiter adalah ';', enclosure adalah '"', dan escape character adalah '\'.foreach ($file as $row): Loop melalui setiap baris file CSV. Setiap baris dikembalikan sebagai array.SplFileObject dihancurkan, disarankan untuk secara eksplisit mengatur variabel objek ke null untuk memastikan sumber daya dibebaskan secepat mungkin, terutama dalam aplikasi yang lebih besar.try-catch untuk menangkap pengecualian yang mungkin terjadi (seperti file tidak ditemukan).Buatlah sebuah script PHP yang membaca file log (misalnya, access.log), mencari baris-baris yang mengandung kata kunci tertentu (misalnya, 'error'), dan menulis baris-baris tersebut ke file baru bernama error.log.