Selamat datang di part 70 dari seri tutorial Tutorial Pemrograman! Di part ini, kita akan menyelami dunia PHP Streams. Streams adalah abstraksi kuat untuk operasi input/output (I/O) di PHP, memungkinkan kita untuk bekerja dengan berbagai sumber data seperti file, jaringan, dan memori secara konsisten. Prasyarat untuk tutorial ini adalah pemahaman dasar tentang file handling di PHP dan pengetahuan tentang PHP Generators dari part sebelumnya (Tutorial Tutorial Pemrograman Part 69: PHP Generators - Efisiensi Memori dengan Iterasi Lazy).
Bayangkan sebuah sungai (stream) yang mengalirkan data. Stream dapat berasal dari berbagai sumber (mata air - sumber data) dan berakhir di berbagai tujuan (muara - tujuan data). Dalam konteks PHP, streams memungkinkan kita membaca data dari sumber (misalnya, file) dan menulis data ke tujuan (misalnya, koneksi jaringan) menggunakan serangkaian operasi yang sama.
Streams di PHP diwakili oleh resource. Kita dapat membuka stream ke sumber data tertentu dan kemudian membaca atau menulis data melalui stream tersebut. Beberapa jenis stream umum termasuk:
Contoh berikut menunjukkan cara membaca file menggunakan stream:
$filename = 'data.txt';
$handle = fopen($filename, 'r'); // Membuka stream untuk membaca file
if ($handle) {
while (($line = fgets($handle)) !== false) { // Membaca setiap baris dari stream
echo $line;
}
fclose($handle); // Menutup stream
} else {
echo "Tidak dapat membuka file.";
}
Penjelasan kode:
fopen($filename, 'r'): Membuka stream ke file 'data.txt' dalam mode baca ('r').fgets($handle): Membaca satu baris dari stream yang dibuka oleh fopen.fclose($handle): Menutup stream setelah selesai membaca.Contoh berikut menunjukkan cara menulis ke file menggunakan stream:
$filename = 'output.txt';
$handle = fopen($filename, 'w'); // Membuka stream untuk menulis file (menimpa jika sudah ada)
if ($handle) {
fwrite($handle, "Hello, Streams!\n"); // Menulis string ke stream
fwrite($handle, "Ini adalah baris kedua.\n");
fclose($handle); // Menutup stream
echo "Berhasil menulis ke file.";
} else {
echo "Tidak dapat membuka file untuk menulis.";
}
Penjelasan kode:
fopen($filename, 'w'): Membuka stream ke file 'output.txt' dalam mode tulis ('w'). Jika file sudah ada, isinya akan ditimpa.fwrite($handle, "..."): Menulis string ke stream yang dibuka oleh fopen.Stream filters memungkinkan kita untuk memodifikasi data saat dibaca atau ditulis melalui stream. Contoh berikut menunjukkan cara menggunakan filter string.toupper untuk mengubah teks menjadi huruf besar saat dibaca dari file:
$filename = 'data.txt';
$handle = fopen($filename, 'r');
if ($handle) {
stream_filter_append($handle, 'string.toupper', STREAM_FILTER_READ); // Menambahkan filter uppercase
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
} else {
echo "Tidak dapat membuka file.";
}
Penjelasan kode:
stream_filter_append($handle, 'string.toupper', STREAM_FILTER_READ): Menambahkan filter string.toupper ke stream untuk operasi baca (STREAM_FILTER_READ).fclose() setelah selesai menggunakannya untuk menghindari kebocoran sumber daya.fopen() berhasil sebelum mencoba membaca atau menulis ke stream.Buatlah program yang membaca file CSV dan mengubah setiap baris menjadi array asosiatif. Gunakan stream untuk membaca file dan fgetcsv() untuk memproses setiap baris CSV.