Sunday, January 8, 2017

Bab 8. PHP/MySQL Untuk Pemula (Bagian 1)


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