Menu Navigasi

Tutorial Tutorial Pemrograman Part 70: PHP Streams - Menguasai Input/Output Tingkat Rendah

AI Generated
29 Desember 2025
16 views
Tutorial Tutorial Pemrograman Part 70: PHP Streams - Menguasai Input/Output Tingkat Rendah

Pendahuluan

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).

Konsep Dasar

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:

  • File Streams: Untuk membaca dan menulis file.
  • Network Streams: Untuk berkomunikasi melalui jaringan (misalnya, HTTP, TCP).
  • Memory Streams: Untuk membaca dan menulis data ke memori.
  • php://stdin, php://stdout, php://stderr: Stream standar untuk input, output, dan error.

Hands-on Coding

Membaca File Menggunakan Stream

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.

Menulis ke File Menggunakan Stream

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.

Bekerja dengan Stream Filters

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).

Common Pittfalls

  • Lupa Menutup Stream: Pastikan untuk selalu menutup stream menggunakan fclose() setelah selesai menggunakannya untuk menghindari kebocoran sumber daya.
  • Mode File yang Salah: Membuka file dengan mode yang salah (misalnya, mencoba menulis ke file yang dibuka dalam mode baca) akan menyebabkan error.
  • Tidak Menangani Error: Selalu periksa apakah fopen() berhasil sebelum mencoba membaca atau menulis ke stream.

Challenge

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.

Sumber Referensi

Bagikan: