File
dan Direktori (Bagian 1)
Menguji File Dan Direktori
Anda akan memeriksa
apakah file (direktori) tertentu ada pada sistem file atau tidak. Anda akan
menggunakan fungsi PHP file_exists().
<?php
// periksa_file.php
// memeriksa apakah file ada atau tidak
// hasil: "File Ada"
echo file_exists('coba.txt') ? "File Ada" : "File
Tidak Ada";
?>
Membaca Informasi File
Anda akan membaca
informasi detil tentang file tertentu, seperti ukuran dan tipenya. Anda akan
menggunakan satu atau lebih fungsi PHP seperti stat(), filesize(), atau
filetype().
<?php
// informasi_file.php
// menetapkan nama file
$file = "coba.txt";
// membaca statistika file
$info = stat($file);
print_r($info);
// membaca tipe file
$tipe = filetype($file);
echo "Tipe file adalah $tipe\n";
// membaca ukuran file
$ukuran = filesize($file);
echo "Ukuran file adalah $ukuran byte\n";
// apakah file dapat dibaca?
echo is_readable($file) ? "File dapat dibaca\n" :
"File tidak dapat dibaca\n";
// apakah file dapat ditulis?
echo is_writable($file) ? "File dapat ditulis\n" :
"File tidak dapat ditulis\n";
// apakah file dapat dieksekusi?
echo is_executable($file) ? "File dapat dieksekusi\n"
: "File tidak dapat dieksekusi\n";
?>
Membaca File
Di sini, Anda akan
membaca isi dari file lokal atau file remote dan menempatkannya ke dalam sebuah
string atau sebuah array. Anda akan menggunakan fungsi PHP file_get_contents() atau file().
<?php
// baca_file.php
// menetapkan nama file
$file = "coba.txt";
// membaca isi file dan menempatkannya
// ke dalam sebuah array
$dataArr = file($file);
print_r($dataArr);
// membaca isi file dan menempatkannya
// ke dalam sebuah string
$dataStr = file_get_contents($file);
echo $dataStr;
?>
Jika Anda menggunakan
PHP yang lebih lama yang tidak memiliki fungsi file_get_contents(), Anda bisa menggunakan fungsi fread() untuk membaca file ke dalam
sebuah string.
<?php
// baca_file2.php
// mendefinisikan file yang akan dibaca
$file = "coba.txt";
// membuka file
$fp = fopen($file, "rb") or die ("Tidak dapat
membuka file");
// membaca isi file ke dalam string
$dataStr = fread($fp, filesize($file));
echo $dataStr;
// menutup file
fclose($fp) or die("Tidak menutup file");
?>
Jika Anda mencoba
untuk membaca sebuah file pada jaringan, maka bukanlah ide yang baik untuk
membaca file dalam satu chunk karena keterbatasan lebar-bidang jaringan. Pada
situasi semacam itu, cara yang lebih baik adalah membaca file dalam beberapa
chunk menggunakan fungsi fgets(),
dan kemudian menggabungkannya untuk menciptakan string yang utuh.
<?php
// baca_file_jaringan.php
// membuka file
$fp = fopen("/berkas/net/umum/coba.txt",
"rb")
or die ("Tidak
dapat membuka file");
// membaca isi file ke dalam sebuah string
while (!feof($fp)) {
$dataStr .= fgets($fp,
1024);
}
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
// menampilkan isi
echo $dataStr;
?>
Membaca Sebaris Atau
Beberapa Baris Dari File
Di sini, Anda akan
membaca baris tertentu atau beberapa baris dari suatu file. Anda akan
menggunakan fungsi PHP file(), dan
kemudian mengekstrak baris-baris yang diperlukan.
<?php
// baca_baris_file.php
// membaca file ke dalam
$data = file('kekayaan.txt') or die("Tidak dapat membaca
file");
// membaca baris pertama
echo $data[0] . "\n";
// membaca baris terakhir
echo end($data) . "\n";
// membaca baris kelima
echo $data[4] . "\n";
// membaca baris ke 2-6
$bbrp_baris = array_slice($data, 1, 5);
echo implode("\n", $bbrp_baris);
?>
Sekarang, Anda akan
menuliskan fungsi sendiri, yang menggunakan fungsi PHP fgets() dan fseek()
untuk membaca satu atau lebih baris dari file.
<?php
// baca_satu_dua_baris.php
// fungsi untuk membaca suatu rentang baris
// dari sebuah file
function bacaBaris($file, $nomorAwalBaris, $nomorAkhirBaris) {
// memeriksa rentang
baris valid
if ($nomorAkhirBaris
< $nomorAwalBaris) {
die("Nomor
baris akhir harus lebih besar atau
sama dengan
nomor baris awal!");
}
// menginisialisasi
kounter baris
$kounterBaris = 0;
// membuka file untuk
operasi pembacaan
$fp = fopen($file,
"rb") or die("Tidak dapat membuka file");
// membaca isi file
baris demi baris
while (!feof($fp)
&& $kounterBaris <= $nomorAkhirBaris) {
// setelah nomor
baris awal didapatkan
// simpan isi file
ke dalam sebuah array
// sampai nomor
baris akhir didapatkan
$kounterBaris++;
$baris =
fgets($fp);
if ($kounterBaris
>= $nomorAwalBaris && $kounterBaris <=
$nomorAkhirBaris) {
$dataBaris[] =
$baris;
}
}
// menutup file
fclose($fp) or die
("Tidak dapat menutup file");
// menghasilkan
rentang baris
return $dataBaris;
}
// menghasilkan baris 2-6 dari file sebagai array
$arrayBaris = bacaBaris("kekayaan.txt", 2, 6);
print_r($arrayBaris);
?>
Anda dapat pula
membaca baris pertama dan baris terakhir dari suatu file dengan menggabungkan
pemanggilan terhadap fungsi fseek()
dan fgets(), seperti diilustrasikan
berikut:
<?php
// baca_baris_awal_terakhir.php
// membuka file
$fp = fopen('kekayaan.txt', "rb") or die("Tidak
dapat membuka file");
// membaca baris pertama
fseek($fp, 0, SEEK_SET);
echo fgets($fp);
// membaca baris terakhir
fseek($fp, 0, SEEK_SET);
while (!feof($fp)) {
$baris = fgets($fp);
}
echo $baris;
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
?>
Membaca Rentang Byte Dari
File
Anda akan membaca
byte tertentu atau rentang byte tertentu dari sebuah file. Anda akan menuliskan
sebuah fungsi sendiri yang menggabungkan pemanggilan terhadap fungsi fseek(), ftell(), dan fgetc().
<?php
// baca_byte_file.php
// fungsi untuk mendapatkan sejumlah byte
// dari sebuah file
function bacaByte($file, $byteAwal, $byteAkhir) {
// memeriksa kevalidan
rentang byte
if ($byteAkhir <
$byteAwal) {
die("Nomor
byte akhir harus lebih besar dari atau
sama dengan
nomor byte awal!");
}
// membuka file untuk
operasi pembacaan
$fp = fopen($file,
"rb") or die("Tidak dapat membuka file");
// membaca byte awal
// karakter demi
karakter
// sampai byte akhir
fseek ($fp, $byteAwal,
SEEK_SET);
while (!(ftell($fp)
> $byteAkhir)) {
$data .=
fgetc($fp);
}
// menutup file
fclose($fp) or die
("Tidak dapat menutup file");
// menghasilkan data
return $data;
}
// menghasilkan 10 byte pertama dari file
echo bacaByte("kekayaan.txt", 0, 9);
?>
Menghitung Baris, Kata, dan
Karakter Dalam File
Di sini, Anda akan
menghitung jumlah baris, kata, dan karakter dalam sebuah file. Anda akan
menggunakan fungsi PHP file_get_contents(),
strlen(), dan str_word_count() untuk menghitung jumlah kata dan karakter dalam
file.
<?php
// hitung_kata_karakter.php
// menetapkan nama file dan path
$file = "kekayaan.txt";
// membaca isi file ke dalam string
$str = file_get_contents($file) or die ("Tidak dapat
membaca dari file");
// membaca isi file ke dalam array
$arr = file ($file) or die ("Tidak dapat membaca dari
file");
// menghitung baris
echo "Terdapat ". sizeof($arr) . " baris dalam
file.\n";
// menghitung karakter, dengan spasi
$jumKarSpasi = strlen($str);
echo "Terdapat $jumKarSpasi karakter dan spasi.\n";
// menghitung karakter, tanpa spasi
$strBaru = ereg_replace('[[:space:]]+', '', $str);
$jumKar = strlen($strBaru);
echo "Terdapat $jumKar karakter tanpa spasi.\n";
// menghitung kata
$jumKata = str_word_count($str);
echo "Terdapat $jumKata kata di dalam file.\n";
?>
Menulis Ke File
Di sini, Anda akan
menuliskan sebuah string ke dalam file. Anda akan menggunakan fungsi PHP file_put_contents().
<?php
// tulis_file.php
// mendefinisikan string yang akan ditulis
$data = "All the world's a stage\r\nAnd all the men and
women merely players";
// menulis string ke dalam file
file_put_contents('shakespeare.txt', $data) or die("Tidak
dapat
menulis ke
file"); echo "File berhasil ditulis.";
?>
Jika Anda menggunakan
PHP yang lebih tua yang tidak mengenali fungsi file_put_contents(), maka Anda dapat menggunakan fungsi fwrite() untuk menggantikannya.
<?php
// tulis_file2.php
// mendefinisikan string yang akan ditulis
$data = "All the world's a stage\r\nAnd all the men and
women merely
players";
// membuka file
$fp = fopen('shakespeare.txt', "wb+") or die
("Tidak dapat membuka file");
// mengunci file
// menuliskan string ke dalam file
if (flock($fp, LOCK_EX)) {
fwrite($fp, $data) or
die("Tidak dapat menulis ke dalam file");
flock($fp, LOCK_UN);
echo "File
berhasil ditulis.";
} else {
die ("Tidak dapat
mengunci file");
}
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
?>
Mengunci dan Membuka Kunci
File
Anda akan mengunci
file sebelumnya menuliskan data ke dalamnya. Anda akan menggunakan fungsi PHP flock().
<?php
// kunci_file.php
// membuka file
$fp = fopen('coba.txt', "wb+") or die ("Tidak
dapat membuka file");
// mengunci file
// menulis string ke dalam file
if (flock($fp, LOCK_EX)) {
fwrite($fp, "Ini percobaan kunci file.") or die("Tidak dapat
menulis ke file");
flock($fp, LOCK_UN);
} else {
die ("Tidak dapat
mengunci file");
}
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
echo "File berhasil ditulis.";
?>
Menghapus Baris Data Dari
File
Di sini, Anda akan
menghapus sebuah baris dari suatu file, bila diberikan nomor barisnya. Anda
akan menggunakan fungsi PHP file()
untuk membaca file ke dalam array, menghapus baris, dan kemudian menulis file
kembali menggunakan fungsi file_put_contents().
<?php
// hapus_baris_file.php
// menetapkan nama file
$file = "kekayaan.txt";
// membaca file ke dalam array
$data = file($file) or die("Tidak dapat membaca
file");
// menghapus baris ketiga
unset ($data[2]);
// mengindeks-ulang array
$data = array_values($data);
// menuliskan data kembali ke dalam file
file_put_contents($file, implode($data)) or die("Tidak
dapat menulis ke file");
echo "File berhasil ditulis.";
?>
Jika PHP Anda tidak
mendukung fungsi file_put_contents(),
maka Anda dapat melakukannya dengan menggabungkan fungsi fgets() dan fwrite()
berikut:
<?php
// hapus_baris_file2.php
// menetapkan nama file
$file = "kekayaan.txt";
// menetapkan nomor baris yang akan dihapus
$nomorBaris = 3;
// membuka file untuk pembacaan
$fp = fopen($file, "rb") or die("Tidak dapat
membuka file");
// membaca isi file baris demi baris
// melompati baris yang akan dihapus
$kounterBaris = 0;
while (!feof($fp)) {
$kounterBaris++;
$baris = fgets($fp);
if ($kounterBaris !=
$nomorBaris) {
$data .= $baris;
}
}
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
// membuka file kembali untuk penulisan
$fp = fopen($file, "rb+") or die("Tidak dapat
membuka file");
// mengunci file
// menuliskan data ke dalam file
if (flock($fp, LOCK_EX)) {
fwrite($fp, $data) or
die("Tidak dapat menulis ke file");
flock($fp, LOCK_UN);
} else {
die ("Tidak dapat
mengunci file untuk penulisan");
}
// menutup file
fclose($fp) or die ("Tidak dapat menutup file");
echo "File berhasil ditulis.";
?>
Memproses Direktori
Anda akan secara
iteratif memproses semua file di dalam sebuah direktori. Anda akan menggunakan
fungsi PHP scandir().
<?php
// proses_direktori.php
// mendefinisikan path direktori
$dir = './citra';
// membaca isi direktori sebagai array
$daftarFile = scandir($dir) or die ("Bukan
direktori");
// menampilkan tiap nama file dan ukurannya
foreach ($daftarFile as $file) {
if
(is_file("$dir/$file") && $file != '.' && $file !=
'..') {
echo "$file:
" . filesize("$dir/$file") . "\n";
}
}
?>
Pendekatan
alternatif yang bisa Anda lakukan adalah dengan menggunakan Iterator sebagai
bagian dari SPL (Standard PHP Library).
Iterator dapat dipakai untuk menjelajah koleksi item seperti array dan
direktori. Untuk memproses direktori, Anda bisa menggunakan DirectoryIterator,
seperti diilustrasikan di sini:
<?php
// proses_direktori2.php
// mendefinisikan path direktori
$dir = './citra';
// menciptakan sebuah objek DirectoryIterator
$iterator = new DirectoryIterator($dir);
// menetapkan ke awal direktori
$iterator->rewind();
// beriterasi pada direktori menggunakan metode-metode objek
// menampilkan tiap nama baris
while($iterator->valid()) {
if
($iterator->isFile() && !$iterator->isDot()) {
print
$iterator->getFilename() . ": " .
$iterator->getSize() . "\n";
}
$iterator->next();
}
?>
Memproses Direktori Secara
Rekursif
Di sini, Anda akan
memproses semua file dalam direktori dan subdirektorinya. Anda akan menuliskan
fungsi rekursif untuk memproses direktori dan semua anaknya.
<?php
// proses_direktori_rekursif.php
// fungsi untuk memproses secara rekursif
// sebuah direktori dan semua subdirektorinya
function jelajahDir($dir) {
// memeriksa apakah
argumen adalah direktori yang valid
if (!is_dir($dir)) {
die("Argumen '$dir' bukan sebuah direktori!"); }
// mendeklarasikan
variabel untuk menampung daftar file
global $daftarFile;
// membuka direktori
$dh = opendir($dir) or
die ("Tidak dapat membuka direktori '$dir'!");
// beriterasi pada
file-file di dalam direktori
while (($file = readdir($dh))
!== false) {
// memfilter
"." dan ".."
if ($file !=
"." && $file != "..") {
if
(is_dir("$dir/$file")) {
// ini
adalah subdirektori
// proses
secara rekursif
jelajahDir("$dir/$file");
} else {
// ini
adalah file
// lakukan
sesuatu
//
misalnya, membalik nama/path dan tambahkan ke array
$daftarFile[] = strrev("$dir/$file");
}
}
}
// menghasilkan daftar
file akhir
return $daftarFile;
}
// memproses secara rekursif sebuah direktori
$hasil = jelajahDir('./citra');
print_r($hasil);
?>
Menampilkan Pohon Direktori
Anda akan
menampilkan daftar hierarkis dari sebuah direktori dan isinya. Anda akan
menuliskan sebuah file rekursif untuk menjelajah direktori dan menampilkan
isinya.
<pre>
<?php
// tampil_pohon_direktori.php
// fungsi untuk memproses secara rekursif
// sebuah direktori dan semua subdirektorinya
// dan menampilkan daftar hierarkisnya
function tampilPohon($dir, $kedalaman=0) {
// memeriksa apakah
argumen adalah direktori yang valid
if (!is_dir($dir)) {
die("Argumen '$dir' bukan sebuah direktori!"); }
// membuka direktori
$dh = opendir($dir) or
die ("Tidak dapat membuka direktori '$dir'!");
// beriterasi pada
file-file dalam direktori
while (($file =
readdir($dh)) !== false) {
// memfilter
"." dan ".."
if ($file !=
"." && $file != "..") {
if
(is_dir("$dir/$file")) {
// ini
adalah subdirektori (cabang)
//
tampilkan dan pergi ke dalam lagi it and go deeper
echo
str_repeat(" ", $kedalaman) . " [$file]\n";
tampilPohon("$dir/$file", ($kedalaman+1));
} else {
// ini
adalah file (daun)
//
tampilkan
echo
str_repeat(" ", $kedalaman) . " $file\n";
}
}
}
}
// memproses secara rekursif dan menampilkan pohon direktori
tampilPohon('./citra/');
?>
</pre>
Menyalin File
Anda akan menyalin
sebuah file dari satu lokasi ke lokasi lain. Anda akan menggunakan fungsi PHP copy().
<?php
// salin_file.php
// menetapkan nama file
$sumber = "kekayaan.txt";
$tujuan = "kekayaan.txt.cadangan";
// menyalin file jika file ada, sebalinya keluar
if (file_exists($sumber)) {
copy ($sumber,
$tujuan) or die ("Tidak dapat menyalin file '$sumber'");
echo "File
berhasil disalin.";
} else {
die ("Tidak dapat
menemukan file '$sumber'");
}
?>
Menyalin File Remote
Anda akan
menciptakan salinan lokal dari sebuah file yang ditempatkan pada server remote.
Anda akan menggunakan fungsi PHP file_get_contents()
dan file_put_contents() untuk
membaca file remote dan menuliskannya pada sebuah file lokal.
<?php
// salin_file_remote.php
// menambah batas waktu eksekusi skript
ini_set('max_execution_time', 600);
// menetapkan URL dari file yang akan didownload
$fileRemote =
"http://www.suatu.domain/remote.file.tgz";
// menetapkan nama dari file lokal
$fileLokal = "local.file.tgz";
// membaca file remote
$data = file_get_contents($fileRemote) or
die("Tidak dapat
membaca dari file remote");
// menulis data ke dalam file lokal
file_put_contents($fileLokal, $data) or
die("Tidak dapat
menulis ke file lokal");
// menampilkan pesan sukses
echo "File [$fileRemote] berhasil di salin ke
[$fileLokal]";
?>
Menyalin Direktori
Di sini, Anda akan
menyalin sebuah direktori dan semua isinya, termasuk subdirektorinya. Anda akan
menuliskan sebuah fungsi rekursif untuk menjelajah suatu direktori dan menyalin
semua filenya.
<?php
// salin_direktori.php
// fungsi untuk menyalin secara rekursif
// sebuah direktori dan subdirektorinya
function salinRekursif($sumber, $tujuan) {
// memeriksa apakah sumber ada
if
(!file_exists($sumber)) { die("'$sumber' tak valid"); }
if (!is_dir($tujuan))
{
mkdir ($tujuan);
}
// membuka direktori
$dh = opendir($sumber)
or die ("Tidak dapat membuka direktori '$sumber'");
// menjelajah tiap
file dalam direktori
while (($file =
readdir($dh)) !== false) {
// membuang
"." dan ".."
if ($file !=
"." && $file != "..") {
if
(is_dir("$sumber/$file")) {
// ini
adalah subdirektori
// salin secara rekursif
salinRekursif("$sumber/$file", "$tujuan/$file");
} else {
// ini
sebuah file
// salin
copy
("$sumber/$file", "$tujuan/$file")
or die
("Tidak dapat menyalin file '$file'");
}
}
}
// menutup direktori
closedir($dh);
}
// menyalin direktori secara rekursif
salinRekursif("citra", "temp");
echo "Direktori berhasil disalin.";
?>
Menghapus File
Anda akan menghapus
sebuah file. Anda akan menggunakan fungsi PHP unlink().
<?php
// hapus_file.php
// menetapkan nama file
$file = "shakespeare.txt";
// memeriksa apakah file ada
// jika ada, hapus
if (file_exists($file)) {
unlink ($file) or
die("Tidak dapat menghapus file '$file'");
echo "File
berhasil dihapus.";
} else {
die ("Tidak dapat
menghapus file '$file'");
}
?>
Menghapus Direktori
Anda akan menghapus
sebuah direktori dan isinya, termasuk subdirektorinya. Anda akan menuliskan
sebuah fungsi rekursif untuk menjelajah sebuah direktori dan semua anaknya, dan
menghapus semua file.
<?php
// hapus_direktori.php
// fungsi untuk menghapus secara rekursif
// sebuah direktori dan semua subdirektorinya
function hapusRekursif($dir) {
// memeriksa apakah
argumen adalah direktori yang valid
if (!is_dir($dir)) {
die("'$dir' bukan direktori yang valid"); }
// membuka direktori
$dh = opendir($dir) or
die ("Tidak dapat membuka direktori '$dir'");
// beriterasi pada
setiap file di dalam direktori
while (($file =
readdir($dh)) !== false) {
// membuang
"." dan ".."
if ($file !=
"." && $file != "..") {
if
(is_dir("$dir/$file")) {
// jika
ini subdirektori
// hapus secara rekursif
hapusRekursif("$dir/$file");
} else {
// jika
ini adalah file
// hapus
unlink ("$dir/$file") or die ("Tidak dapat menghapus
file '$file'");
}
}
}
// menutup direktori
closedir($dh);
// menghapus
direktori level-atas
rmdir($dir);
}
// menghapus direktori secara rekursif
hapusRekursif("sampah/rismon/");
echo "Direktori berhasil dihapus.";
?>
No comments:
Post a Comment