Cara menggunakan php fread fwrite

PHP’s fread and fwrite functions are great, but the examples on php.net don’t line up with each other. That’s not an error, but it is a nuisance when you’re always having to tweak the copied and pasted code. No more! Start here with these cleaned up versions instead:

$handle = fopen($file, 'r');
$contents = fread($handle, filesize($file));
fclose($handle);
$handle = fopen($file, 'w');
fwrite($handle, $contents);
fclose($handle);

Or, if you need a bit of error-checking, you can use these instead:

if (!file_exists($file)) { display_error('Read file does not exist.'); }
$handle = @fopen($file, 'r') or display_error('Could not open file for reading.');
$contents = @fread($handle, filesize($file)) or display_error('Could not read from file.');
fclose($handle);
if (file_exists($file) && (!is_writeable($file))) { display_error('Write file is not writeable.'); }
$handle = @fopen($file, 'w') or display_error('Could not open file for writing.');
@fwrite($handle, $contents) or display_error('Could not write to file.');
fclose($handle);

In all of these, display_error is the name of a custom error handling function. Replace it with your own. Or borrow this:

function display_error($error_text) {
  die('<p style="color:red;font-weight:bold;">ERROR! '.$error_text.'</p>');
}

Pendahuluan

Di dalam tutorial ini kita akan membahas tentang cara manipulasi file di dalam PHP menggunakan fungsi-fungsi bawaan. Mulai dari berbagai cara untuk membaca file, menulis, menimpa file yang sudah ada dan juga menghapusnya.

Pembahasan ini akan kita bagi menjadi dua bagian: bagian pertama akan membahas cara membaca dan membuka file di dalam PHP. Sedangkan fungsi-fungsi sisanya akan kita bahas pada pertemuan ke-2.

Memeriksa Ketersediaan File

Sebelum kita memulai membaca file, kita akan mengenal fungsi file_exists() terlebih dahulu. Fungsi tersebut berfungsi untuk memeriksa apakah suatu file benar-benar exist atau tidak.

Jika file yang kita maksudkan ternyata memang ada, maka ia akan mengembalikan nilai true, dan sebaliknya jika file yang kita maksud ternyata tidak ada, dia akan mengembalikan nilai false.

Perhatikan contoh berikut:

<?php

if (file_exists('buah.txt')) {
  // file ada
} else {
  echo "File buah.txt tidak ditemukan <br>";
}

Jika file bernama buah.txt tidak ada, maka blok kode else yang akan dieksekusi oleh interpreter PHP.

Membaca File Dengan readfile()

Katakanlah kita memiliki sebuah file bernama buah.txt. File tersebut berisi nama-nama buah di tiap barisnya:

Mangga
Jeruk
Apel
Durian
Anggur

Lalu kita akan membacanya dengan PHP. Cara pertama yang bisa kita lakukan adalah menggunakan fungsi readfile(). Perhatikan contoh berikut:

<?php

echo readfile('buah.txt');

Fungsi readfile() akan membaca semua baris dari file buah.txt lalu diikuti ukuran file dalam satuan byte. Oleh karena itu kode program di atas akan menghasilkan output sebagai berikut:

Mangga Jeruk Apel Durian Anggur31

Fungsi readfile() bukan lah fungsi yang disarankan untuk membaca file karena keterbatasan fitur-fiturnya.

Membaca File Dengan file_get_contents()

Cara yang kedua adalah dengan menggunakan fungsi file_get_contents(). Fungsi tersebut bisa untuk membaca berbagai file, baik secara lokal mau pun global (maksudnya url suatu situs tertentu), dan juga bisa membaca berbagai format file baik itu gambar, teks, json, xml, dan lain-lain.

Kita akan coba membaca isi dari file buah.txt. Perhatikan contoh program berikut:

<?php

echo file_get_contents('buah.txt');

Output:

Mangga Jeruk Apel Durian Anggur

Jika anda mengubah karakter \n menjadi tag <br> menggunakan fungsi nl2br2() sebagaimana berikut:

<?php

echo nl2br(file_get_contents('buah.txt'));

Maka anda akan mendapatkan output yang sama persis dengan isi dari file buah.txt:

Mangga
Jeruk
Apel
Durian
Anggur

Membaca File Dengan file()

Di antara fungsi bawaan PHP yang bisa kita gunakan untuk membaca keseluruhan isi file adalah fungsi bernama file(). Ia melakukan tugas yang sama dengan fungsi file_get_contents().

Hanya saja, fungsi file() mengembalikan konten dari suatu file dalam bentuk array untuk tiap barisnya. Berbeda dengan fungsi file_get_contents() yang mengembalikan seluruh konten dari suatu file dalam bentuk string utuh.

Perhatikan contoh berikut:

<?php

$isiFileBuah = file('buah.txt');

echo '<pre>';
print_r($isiFileBuah);
echo '</pre>';

Output:

Array
(
    [0] => Mangga
    [1] => Jeruk
    [2] => Apel
    [3] => Durian
    [4] => Anggur
)

Kita juga bisa menampilkannya dengan foreach sebagaimana telah kita pelajari pada tutorial perulangan dan juga tutorial tentang manipulasi array.

Membaca File Dengan fopen(), fread() dan fclose()

Cara selanjutnya adalah dengan menggunakan fopen(), fread() dan fclose().

Cara ini lebih ribet dari sebelumnya, lebih banyak stepnya, tapi lebih direkomendasikan untuk kasus-kasus tertentu karena banyak fungsi yang bisa kita lakukan.

Skenario umumnya adalah 3 langkah:

  1. Kita buka file yang kita inginkan dengan fungsi fopen()
  2. Setelah file kita buka, kita bisa membaca isi file tersebut dengan fungsi fread().
  3. Ketika proses selesai, kita bisa menutup file tersebut dan menghapusnya dari memori menggunakan fungsi fclose().

Perhatikan contoh berikut, kita masih akan bermain-main dengan file buah.txt:

<?php

$file = fopen('buah.txt', 'r');

if (!$file) {
  die('File tidak ada');
}

# mulai baca file
echo fread($file, filesize('buah.txt'));

# tutup file agar ia dihapus dari memory
fclose($file);

Output:

Mangga Jeruk Apel Durian Anggur

Penjelasan

Dari kode program di atas, kita akan menjelaskan beberapa hal sebagai berikut:

  • fungsi fopen() menerima dua parameter:
    • parameter pertama adalah nama file
    • sedangkan parameter kedua adalah mode pembukaan file tersebut. Di dalam kode program di atas, kita menggunakan mode r yang artinya read.
    • Apa saja mode yang tersedia? Kita akan simak beberapa saat lagi.
  • fungsi fopen() akan bernilai false jika file yang kita maksud ternyata tidak ada.
  • fungsi fread() menerima 2 parameter:
    • parameter pertama yaitu hasil kembalian dari fungsi fopen()
    • dan parameter kedua berisi berapa byte yang akan dibaca dari file tersebut
    • paramter kedua kita isi dengan fungsi filesize('buah.txt') agar isi file tersebut terbaca semuanya.
  • setelah proses yang berkaitan dengan variabel $file selesai, kita tutup dengan fungsi fclose() yang menerima parameter hasil kembalian dari fungsi fopen().

Mode yang tersedia untuk fungsi fopen()

ModeDeskripsi
r Membuka file dalam mode read only.
w Membuka file dalam mode write only. Ia akan menghapus keseluruhan isi file dan menimpanya dengan yang baru, atau jika file tersebut belum pernah ada, ia akan membuatnya terlebih dahulu.
a Membuka file dalam mode write only. Isi dari file yang sebelumnya tetap dipertahankan.
x Membuat file baru dalam mode write only. Mengembalikan nilai false jika file telah ada sebelumnya.
r+ Membuka file dalam mode read dan write.
w+ Membuka file dalam mode read dan write. Menghapus konten file sebelumnya atau membuat file baru jika belum ada.
a+ Membuka file dalam mode read dan write. Sama seperti w+ akan tetapi konten file yang sebelumnya tidak dihapus.
x+ Membuka file dalam mode read dan write. Mengembalikan nilai false jika file telah ada sebelumnya.

Membaca File Perbaris dengan fgets()

Selain menggunakan fungsi fread() untuk membaca konten dari suatu file. Kita juga bisa menggunakan fungsi fgets().

Bedanya?

Jika menggunakan fread() berarti kita akan membaca konten dari suatu file sesuai dengan ukuran byte yang kita definisikan. Sedangkan jika menggunakan fungsi fgets(), maka kita membaca konten perbaris.

Perhatikan contoh berikut:

<?php

$file = fopen('buah.txt', 'r');

if (!$file) {
  die('File tidak ada');
}

# mulai baca file
echo fgets($file) . '<br>'; # baris 1
echo fgets($file) . '<br>'; # baris 2
echo fgets($file) . '<br>'; # baris 3
echo fgets($file) . '<br>'; # baris 4
echo fgets($file) . '<br>'; # baris 5

# tutup file agar ia dihapus dari memory
fclose($file);

Kode program di atas akan menghasilkan output sebagai berikut:

Mangga
Jeruk
Apel
Durian
Anggur

Mengetahui Akhir Baris Suatu File

Dari kode program sebelum ini, kita tahu bahwa pointer dari proses pembacaan file akan berpindah dengan memanggil fungsi fgets(). Sehingga kita bisa menampilkan semua baris dari suatu file dengan memanggil fgets() sebanyak jumlah baris tersebut.

Akan tetapi, bagaimana caranya kita tahu bahwa pointer pembacaan file telah berada pada baris paling bawah?

Jawabannya adalah menggunakan fungsi feof(). Kata eof sendiri adalah singkatan dari end-of-file. Fungsi tersebut akan mengembalikan nilai true jika pointer berada pada baris paling akhir, dan jika tidak maka ia akan mengembalikan nilai false.

Perhatikan kode program berikut:

<?php

$file = fopen('buah.txt', 'r');

if (!$file) {
  die('File tidak ada');
}

# lakukan perulangan selama feof bernilai false
while (!feof($file)) {
    echo fgets($file) . '<br>';
}

# tutup file agar ia dihapus dari memory
fclose($file);

Kesimpulan

Bahasa pemrograman PHP adalah bahasa yang berjalan di server. Sehingga proses manipulasi file adalah suatu hal yang hampir menjadi keniscayaan.

Untuk membaca file, kita bisa menggunakan beberapa cara. Mulai dari fungsi readfile(), fungsi file_get_contents(), fungsi file(), fungsi fread() dan juga fgets().

Pembahasan Selanjutnya

Pada pembahasan selanjutnya, insyaallah kita masih dalam pembahasan manipulasi file bagian kedua. Yaitu tentang membuat file baru, mengedit, dan juga menghapus.