Pada bagian ini, kita akan mempelajari bagaimana script php berinteraksi dengan file. Sebagai contoh, kita akan meneruskan aplikasi contact manager dengan memungkinkan pengguna untuk mengupload file foto beserta komentarnya. Setelah foto berhasil diupload, kita akan memberikan halaman untuk mengakses foto dan komentar tersebut.
Sebelumnya, form HTML yang dibutuhkan harus disiapkan dengan bentuk sebagai berikut:

form tersebut harus dapat menghandle file upload. Listing kode upload.htm adalah sebagai berikut:
<html>
<head>
<title>Pic Uploader</title>
</head>
<body>
<h1>Pic Uploader</h1>
<form enctype="multipart/form-data" method="POST" action="upload.php">
<p>Nama anda : <input type="text" name="nama"> </p>
<p>Masukkan foto anda : <input type="file" name="pic"> </p>
Komentar : <br><TEXTAREA ROWS=5 COLS=40 name="comment"></TEXTAREA>
<p><input type="submit" value="Submit" name="B1"></p>
</form>
</body>
</html>
A. Menulis file
Sekarang kita akan mengerjakan file upload.php yang berguna untuk menangani file upload dari form tersebut. Sebagai contoh, kita akan mengisi form tersebut sebagai berikut:

Form tersebut, setelah diisi dan disubmit, akan diterima oleh server dan menghasilkan beberapa variabel berikut:
| Nama Variabel | Keterangan | Isi |
|---------------|----------------------------------------------------------------|---------------------------|
| $nama | Berisi tulisan yang diisikan user di textfield nama anda | Endy Muhardin |
| $comment | Berisi tulisan yang diisikan user di textarea komentar | Ini foto saya waktu kecil |
| $pic | Berisi file gambar yang diupload, disimpan sementara di server | -- |
| $pic_name | Berisi nama file yang diupload | Coffee Bean.bmp |
| $pic_size | Berisi ukuran file yang diupload | 16.6 kB |
Informasi di atas dapat kita tampilkan dalam script upload.php dengan kode sebagai berikut:
echo("Nama File User = $pic_name <br>");
echo("Nama File User di server= $pic <br>");
echo("Ukuran File User = $pic_size <br>");
echo("Jenis File User = $pic_type <br>");
File yang akan kita tulis ke harddisk berada dalam variabel $pic. File ini akan kita copy untuk disimpan secara permanen dalam disk. Untuk itu, kita akan menambah kode berikut pada upload.php:
$fileServer = "upload/$nama/$pic_name";
copy($pic, $fileServer);
Selain file gambar yang diupload, kita juga akan menuliskan komentar yang ada di textarea ke dalam file, dengan nama yang sama dengan nama gambar, diakhiri dengan extension txt untuk menandai bahwa file tersebut mempunyai format text. Untuk menulis ke dalam file, lakukan langkah-langkah berikut:
Buka/buat file
Untuk dapat mengakses dan mengubah isi file, kita membutuhkan sebuah file descriptor. File descriptor adalah suatu variabel yang digunakan untuk mewakili file tertentu.
File descriptor didapat dengan menggunakan fungsi php : fopen, untuk membuka file. File yang akan kita buat akan diberi nama sesuai dengan nama gambar. Tambahkan kode berikut pada upload.php
$fileComment = "/upload/$nama/$pic_name-comment.txt";
$fp = fopen($fileComment, "w");
seperti kita lihat pada contoh di atas, kita menggunakan fungsi fopen. Fungsi ini membutuhkan dua masukan (parameter), yaitu : nama file, dan jenis akses.
- Nama File : bertipe string, merupakan nama file yang akan dibuka. Harus berada dalam folder yang sama dengan tempat script php yang memanggilnya.
- Jenis Akses : bertipe string, menentukan perlakuan yang diperbolehkan terhadap file yang dibuka. Ada beberapa jenis akses:
- Read : disimbolkan dengan huruf r. File yang dibuka hanya dapat dibaca dan tidak boleh ditulisi. File yang dibuka dengan akses r akan menimbulkan pesan error kalau ada usaha untuk menulis ke dalamnya.
- Write : disimbolkan dengan huruf w. File yang dibuka hanya dapat ditulis dan tidak bisa dibaca. Penulisan terhadap file akan menghapus isi yang sebelumnya.
- Read dan write : disimbolkan dengan r+. File yang dibuka dapat dibaca dan juga ditulisi. Penulisan terhadap file akan ditambahkan pada bagian awal file.
- Write dan read : disimbolkan dengan w+. Apabila file sudah ada, isinya akan dihapus.
- Menambahkan (append) : disimbolkan dengan a. Membuka (membuat bila belum ada) dan menulis di awal file.
- Menambahkan (append) dan membaca: disimbolkan dengan a+.
- Membuka (membuat bila belum ada) dan menulis di awal file.
- Mode binary. Disimbolkan dengan b. Digunakan pada filesystem windows yang membedakan file text dan binary.
Masukkan data
Setelah file berhasil dibuka/dibuat, masukkan data ke dalamnya. Perintahnya adalah sebagai berikut :
fwrite($fp, $comment);
Tutup file
Setelah itu, tutup file.
fclose($fp);
B. Menghapus file
File yang dupload pada pembahasan di atas telah tersimpan secara permanen di harddisk server di folder upload/endymuhardin/Coffee Bean.bmp. dengan demikian, kita dapat menghapus file yang disimpan sementara oleh server. File tersebut kita hapus dengan menggunakan perintah unlink() atau delete(). Tambahkan baris berikut pada upload.php.
unlink($pic);
C. Membuat direktori
Pembaca yang teliti akan menyadari bahwa nama folder pada contoh di atas disesuaikan dengan nama user yang mengupload foto. Karena kita sebagai programmer tidak dapat meramalkan nama user yang akan mengupload foto, kita tidak dapat menyediakan folder yang sesuai dengan kebutuhan tersebut. Dengan demikian, kita harus membuat folder secara dynamic. Membuat direktori atau folder baru bukan hal yang sulit, tambahkan baris berikut pada upload.php :
$oldmask = umask(0);
mkdir("upload/$nama", 0777);
umask($oldmask);
direktori akan dibuat dengan nama folder sesuai dengan nama user yang dimasukkan pada form dengan permission 777. Arti dari permission 777 dan umask tidak dibahas dalam tutorial ini.
D. Navigasi direktori
Selanjutnya, kita akan menampilkan foto yang telah diupload oleh user. Untuk itu, kita harus membuka folder yang berisi file, melihat daftar file yang ada, dan menampilkan foto serta isi comment. Untuk menampilkan foto, kita cukup memberikan link nya saja dalam tag <img> </img>.
Sedangkan untuk menampilkan isi file text, kita harus membuka dan membaca file txt tersebut.
Untuk menampilkan isi direktori, kita terlebih dulu harus membuka direktori. Tambahkan kode berikut pada upload.php :
$myDir = "upload/$nama";
$dir = opendir($myDir);
Direktori yang telah terbuka akan disimpan dalam variabel $dir.
Selanjutnya, kita akan melakukan looping untuk membaca setiap entry yang ada dalam folder. Tambahkan kode berikut :
echo("Isi folder upload/$nama : <br>");
while($tmp = readdir($dir)){
echo($tmp."<br>");
}
Setelah selesai, tutup folder dengan kode berikut:
closedir($dir);
E. Menghapus direktori
Untuk menghapus direktori, gunakan kode berikut :
rmdir($namaDirektori);
direktori yang akan dihapus harus kosong.
F. Membaca file
Untuk menampilkan isi comment yang telah kita tulis ke dalam file, kita akan menempuh langkah-langkah yang sama dengan menulis file, yaitu:
Buka file -- baca isinya -- tutup file.
Ada sedikit modifikasi, kita akan memproses isi comment agar tidak mengandung tag-tag html. Tambahkan kode berikut pada upload.php :
$f = fopen($fileComment, "r"); $isi = fread($f, filesize($fileComment)); fclose($f);
$output = nl2br(htmlspecialchars($isi)); echo("Komentar anda : <br>"); echo($output);
demikianlah isi file ditampilkan.
File lengkap upload.php adalah sebagai berikut :
<?
// -- Upload File -- //
// info tentang file user : echo("Nama File User = $pic_name <br>"); echo("Nama File User di server= $pic <br>"); echo("Ukuran File User = $pic_size <br>"); echo("Jenis File User = $pic_type <br>");
// menulis file pic ke harddisk server
$oldmask = umask(0); mkdir("upload/$nama", 0777); umask($oldmask);
$fileGambar = "upload/$nama/$pic_name"; copy($pic, $fileGambar);
// menulis file comment ke file
$fileComment = "upload/$nama/$pic_name-comment.txt";
$fp = fopen($fileComment, "w"); fwrite($fp, $comment); fclose($fp);
// -- Menampilkan isi folder -- //
$myDir = "upload/$nama";
$dir = opendir($myDir);
echo("<hr>Isi folder upload/$nama : <br>"); while($tmp = readdir($dir)){ echo($tmp."<br>");
}
closedir($dir);
// -- menampilkan pic yang telah diupload -- // echo("<hr>Pic $nama : <br>");
echo("<img src=\"$fileGambar\" border=0 width=100 height=100>");
// -- menampilkan isi file text --//
echo("<hr>Komentar : <br>"); $f = fopen($fileComment, "r");
$isi = fread($f, filesize($fileComment)); fclose($f);
$output = htmlspecialchars($isi); echo($output);
?>