Anda di halaman 1dari 18

MODUL PERKULIAHAN

PEMROGRAMA
N WEB

Modul Standar untuk


digunakan dalam
Perkuliahan di Universitas
Mercu Buana
Program Tatap
Fakultas Kode MK Disusun Oleh
Studi Muka
Ilmu Komputer Sistem 87007 Fajar Masya
Informasi
14

Abstract Kompetensi
Mahasiswa dapat membuat tag-tag Agar mahasiswa dapat mengenal
dasar pada JavaScript
dan memahami sejarah
perkembangan JavaScript serta
dapat memahami tag-tag dasar
pada JavaScript
201 Pemrograman Web
6 2 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Penanganan File dan Penyimpanan
Data
Memanipulasi file-file adalah kebutuhan dasar bagi programer yang serius dan
INTR
O
INTR PHP memberikan tool yang bagus untuk membuat, meng-upload,dan mengedit
O
file-file. Bagian tutorial PHP ini menjelaskan bagaimana PHP dapat berinteraksi
dengan file-file. Setelah menyelesaikan bagian ini, Anda akan dapat melakukan
hal-hal yang berkaitan dengan manipulasi file secara memuaskan.

Ketika Anda memanipulasi file-file, Anda harus berhati-hati karena Anda dapat melakukan
hal-hal yang berbahaya bila Anda melakukan sesuatu yang salah. Kesalahan yang biasa
terjadi antara lain pengeditan file yang salah, mengisi hard-drive dengan data-data buangan,
dan ketidaksengajaan dalam penghapusan isi-isi file.

Kita semua berharap bahwa Anda akan dapat menghindari hal-hal ini dan kesalahan-
kesalahan lain setelah membaca tutorial ini. Namun kita mengetahui bahwa terdapat
sedemikian banyak tempat yang memungkinkan kesalahan dalam pemutaran kode. Karena itu
sebaiknya Anda untuk sangat berhati-hati ketika bekerja dengan file-file di PHP.

Pelajaran ini akan dimulai dengan pelajaran bagaiman membuat, membuka, dan menutup
file-file. Setelah menguasai dasar-dasar ini, akan kita lanjutkan dengan pelajaran-pelajaran
lain yang penting seperti membaca, menulis, menambah, memotong, dan meng-upload file-
file dengan PHP.

Sebelum Anda dapat melakukan segala sesuatu dengan file, file harus telah tersedia. Pada
pelajaran ini Anda akan mempelajari bagaimana membuat file menggunakan PHP.

Pada PHP, file dibuat dengan menggunakan perintah yang juga digunakan untuk membuka
file. Mungkin hal ini sedikit membingungkan, namun akan coba dijelaskan dalam bab ini.

201 Pemrograman Web


6 3 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Pada PHP, perintah fopen digunakan untuk membuka file. Namun perintah ini juga dapat
digunakan untuk membuat file jika tidak ditemukan file yang dimaksud dalam fungsi
pemanggilan file. Jika Anda menggunakan fopen pada file yang tidak tersedia, Anda akan
menciptakan file tersebut, yang dapat Anda buka kemudian untuk menulis atau
menambahkan sesuatu.

Fungsi fungsi penanganan File


fopen
fopen -- Membuka file atau URL

Penulisan :
resource fopen ( string filename, string mode [, bool use_include_path [, resource
zcontext]] )

Hak Akses dalam fopen :

'r' membuka hanya untuk dibaca; meletakkan pointer pada awal file.

'r+' membuka hanya untuk dibaca dan ditulis ; meletakkan pointer pada awal file.

'w' membuka hanya untuk ditulis; meletakkan pointer pada awal file dan melakukan
pemotongan file/truncate dengan panjang nol. Jika file belum ada akan dibuat file baru.

'w+' membuka hanya untuk dibaca dan ditulis; meletakkan pointer pada awal file dan
melakukan pemotongan file/truncate dengan panjang nol. Jika file belum ada akan dibuat file
baru.

'a' membuka hanya untuk ditulis; meletakkan pointer pada awal file dan melakukan
pemotongan file/truncate. Jika file belum ada akan dibuat file baru.

'a+' membuka hanya untuk dibaca dan ditulis;meletakkan pointer pada awal file dan
melakukan pemotongan file/truncate. Jika file belum ada akan dibuat file baru.

201 Pemrograman Web


6 4 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
'x' membuka hanya untuk ditulis; meletakkan pointer pada awal file. Jika file ada, fopen()
akan bernilai salah pada level E_WARNING. jika file tak ada, akan dibuat file baru.
mendukung PHP 4 dan hanya untuk folder lokal.

'x+' membuka hanya untuk dibaca dan ditulis; meletakkan pointer pada awal file. Jika file
ada, fopen() akan bernilai salah pada level E_WARNING. jika file tak ada, akan dibuat file
baru. mendukung PHP 4 dan hanya untuk folder lokal.

Lihat contoh dibawah ini :

<?php
SAMPL
SAMPL
E
E $handle = fopen("/home/rasmus/file.txt", "r");

$handle = fopen("/home/rasmus/file.gif", "wb");

$handle = fopen("http://www.example.com/", "r");

$handle =
Menulis File: Fungsi fwrite
Kita dapat menggunakan PHP untuk menulis file teks. Fungsi fwrite memungkinkan data
untuk dituliskan pada berbagai tipe file. Parameter pertama dari fwrite adalah file handle dan
parameter kedua adalah string data yang dituliskan. Tuliskan dua informasi penting ini dan
Anda dapat melakukan keinginan Anda.
Berikut ini kami menuliskan sepasang nama ke dalam file test.txt, yang masing-masing
dipisahkan dengan spasi.

SAMPL
$myFile = "test.txt";
SAMPL
E
E $fh = fopen($myFile, 'w') or die("can't open file");

$stringData = "Bobby Bopper\r";

fwrite($fh, $stringData);

201 Pemrograman Web


6 5 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Variabel $th memiliki file handle untuk test.txt. File handle diketahui sebagai pointer file,
yang digunakan untuk menulis, dimulai pada bagian awal file.

Kita menulis ke dalam file test.txt dua kali. Setiap kali kita menulis ke dalam file, kita
tuliskan string $stringData, yang pertama kita isikan Bobby Bopper dan yang kedua kita
isikan Tracy Tanner. Setelah selesai menulis, kita menutup file menggunakan fungsi fclose.

Jika Anda membuka file test.txt pada NOTEPAD, tampilan yang nampak adalah sebagai
berikut.

Floppy Jalopy

Pointy Pinto

Membaca File
Kami meminta maaf bila terlalu lama untuk memberitahukan Anda bagaimana Anda
mendapatkan informasi dari file. Pada pelajaran ini, akan diajarkan bagaimana anda
membaca data dari file menggunakan berbagai fungsi PHP.

Sebelum dapat membaca informasi dari sebuah file, kita harus menggunakan fungsi fopen
untuk membuka file untuk dibaca. Berikut ini merupakan kode untuk membuka dan
membaca file yang dibuat di pelajaran sebelumnya.

Fungsi fread merupakan fungsi pokok untuk memperoleh data dari file. Fungsi ini
memerlukan file handle yang kita miliki dan integer untuk memberitahukan berapa banyak
data dalam byte. Hal ini diperlukan untuk pembacaan.

Satu karakter sama dengan satu byte. Jika ingin membaca lima karakter ini, Anda harus
menggunakan lima sebagai integer.

Lihat contoh dibawah ini :

201 Pemrograman Web


6 6 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
$myFile = "test.txt";
SAMPL
SAMPL
E
E
$fh = fopen($myfile, 'r');

$theData = fread($fh, 5);

Lima karakter dari test.txt sekarang tersimpan di dalam $theData. Anda dapat menampilkan
di monitor/echo string ini, $theData atau menuliskannya ke dalam file lain.

Jika Anda ingin membaca semua data dari file, Anda perlu mendapatkan ukuran file. Fungsi
filesize digunakan untuk menunjukkan panjang file dalam byte, seperti yang kita inginkan.
Fungsi filesize memerlukan nama file yang akan diukur.

$myFile = "test.txt";
SAMPL
SAMPL
E
E $fh = fopen($myfile, 'r');

$theData = fread($fh, filesize($myFile));

Sekarang seluruh isi file test.txt disimpan dalam variabel string $theData.

Pada PHP tidaklah terlalu penting untuk menutup semua file setelah menggunakannya karena
server akan menutup semua file setelah kode PHP menyelesaikan pelaksanaan perintah.
Namun Anda selaku programer masih ada kemungkinan untuk melakukan kesalahan
(misalnya secara tidak sengaja mengedit file yang lupa Anda tutup). Anda seharusnya
menutup semua file setelah Anda menyelesaikan pekerjaan Anda.

Pada tutorial sebelumnya kita telah menggunakan fungsi fclose untuk menutup file setelah
kita menggunakan file tersebut. Di sini kita akan mengulang contoh tersebut dan
mendiskusikan pentingnya menutup file.

$ourFileName = "testFile.txt";
SAMPL
SAMPL
E $ourFileHandle = fopen($ourFileName, 'w') or die("can't
E
open file");

fclose($ourFileHandle);

201 Pemrograman Web


6 7 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Fungsi fclose memerlukan file handle yang kita inginkan untuk menutup file. Pada contoh,
kita mengeset variabel "$fileHandle" sama dengan file handle yang dihasilkan fungsi fopen.

Setelah sebuah file ditutup dengan fclose, Anda tidak dapat membaca, menulis, atau
menambahkan sesuatu ke dalam file tersebut selain dengan cara membuka file tersebut sekali
lagi dengan fungsi fopen.

Menghapus File
Anda telah mengetahui bagaimana cara membuat file. Anda mengetahui bagaimana cara
membuka file dengan berbagai cara. Anda juga telah mengetahui bagaimana cara membaca
dan menulis data pada file.

Sekarang adalah waktunya untuk mempelajari bagaimana cara menghapus file. Pada PHP
Anda menghapus file dengan menggunakan fungsi unlink.

Penulisan :
bool unlink ( string filename [, resource context] )

Ketika Anda melihat isi direktori, Anda dapat melihat semua file yang terdapat pada direktori
tersebut karena sistem menampilkan daftar nama file. Anda dapat berpikir bahwa nama-nama
file ini sebagai jaringan yang diciptakan oleh sistem untuk menghubungkan direktori dengan
file-file tersebut.

Jika Anda menggunakan fungsi unlink, Anda membuat sistem menghapus file tersebut.

Sebelum Anda dapat menghapus file, Anda harus yakin bahwa file itu tidak dibuka pada
program Anda. Gunakan fungsi fclose untuk menutup file yang terbuka.

Untuk menghapus testFile.txt, kita hanya menjalankan script PHP yang berada pada direktori
yang sama. Unlink hanya perlu mengetahui nama file untuk dapat mulai menghapusnya.

Lihat contoh script PHP dibawah ini :

201 Pemrograman Web


6 8 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
$ourFileName = "testFile.txt";
SAMPL
SAMPL
E
E unlink($ourFileName);

TestFile.txt sekarang akan terhapus.

Upload File
Salah satu aspek yang sangat bermanfaat dari PHP adalah kemampuannya untuk mengatur
upload file ke server Anda.

Mengijinkan user untuk meng-upload sebuah file ke server Anda akan membuka keseluruhan
worm, jadi berhati-hatilah ketika Anda mengijinkan peng-upload-an file.

Sebelum Anda dapat menggunakan PHP untuk mengatur peng-upload-an Anda, pertama
Anda harus membuat bentukan HMTL yang memungkinkan user untuk memilih file yang
akan di-upload. Lihat pada pelajaran HTML Form untuk dapat melihat secara detil.
Lihat contoh HTML dibawah ini :

<form enctype="multipart/form-data"
action="uploader.php" method="POST">
SAMPL
SAMPL
E
E <input type="hidden" name="MAX_FILE_SIZE"
value="100000" />

Pilih file untuk di upload: <input name="uploadedfile"


type="file" />

Di bawah ini merupakan penjelasan singkat tentang bagian-bagian penting dari kode di atas.
enctype="multipart/form-data" Perlu untuk file PHP yang akan kita buat supaya
dapat berfungsi dengan benar
action="uploader.php" Nama halaman PHP yang akan kita buat, secara singkat.
method="POST" Menginformasikan kepada browser bahwa kita ingin mengirimkan
informasi kepada server.
input type="hidden" name="MA... Mengeset ukuran maksimum file yang
diijinkan dalam byte, yang bisa di-upload. Mekanisme keamanan ini dapat dengan

201 Pemrograman Web


6 9 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
mudah dilewati dan kami akan menunjukkan solid backup solution pada PHP. Kita
telah mengeset ukuran file maksimum sebesar 100 KB pada contoh ini.
input name="uploadedfile" - uploadedfile adalah bagaimana kita akan mengakses
file pada script PHP kita.

Simpan kode isian ke dalam file yang diberi nama upload.html. Jika Anda melihatnya pada
browser akan nampak sebagai berikut.

Setelah user meng-klik submit, data akan dikirim kepada server dan user akan diarahkan ke
uploader.php. File PHP ini akan mengerjakan semua pekerjaan.

Apa yang akan Dilakukan oleh PHP?


Sekarang kita telah memiliki form HMTL yang benar, kita dapat mulai mengkodekan script
PHP yang akan meng-handle upload kita. File PHP akan membuat keputusan kunci dengan
semua peng-upload-an : menyimpan file tersebut atau membuangnya. File akan dihapus
dengan berbagai alasan seperti :
File terlalu besar dan Anda tidak ingin memiliki file tersebut pada server Anda.
Anda menginginkan seseorang untuk meng-upload sebuah gambar dan ia meng-
upload yang lain seperti executable file (.exe).
Ada masalah dalam peng-upload-an file dan Anda tidak dapat mengatasinya

Contoh ini sangat sederhana dan mengabaikan kode yang akan menambah fungsionalitas.

Ketika file uploader.php telah diakses, file yang di-upload akan berada pada penyimpanan
sementara pada server. Jika file tidak dipindahkan ke tempat lain, file ini akan rusak. Untuk
menyimpan file kita yang berharga, kita perlu menggunakan $_FILES associative array.

Array $_FILES adalah tempat di mana PHP menyimpan semua informasi tentang file. Ada
dua elemen array yang harus kita pahami untuk contoh ini.
uploadedfile - uploadedfile adalah referensi pada form HTML kita. Kita akan
memerlukannya untuk memberitahukan array $_FILES file mana yang kita inginkan.

201 Pemrograman Web


6 10 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
$_FILES['uploadedfile']['name'] - name berisi jalur asli dari file yang di-upload
oleh user
$_FILES['uploadedfile']['tmp_name'] - tmp_name berisi jalur untuk file
sementara / temporary yang ada pada server. File harus ada pada server dalam
direktori sementara dengan nama sementara.

Sekarang kita dapat mulai menuliskan basic PHP upload manager script! Di bawah ini
bagaimana kita dapat memperoleh nama file sementara, memilih nama permanen, dan
memilih tempat untuk menyimpan file.

// Where the file is going to be placed


SAMPL
SAMPL
E
E $target_path = "uploads/";

// Add the original filename to our target path. Result is


"uploads/filename.extension"

Catatan : Anda akan perlu membuat direktori baru di dalam direktori di mana terdapat
uploader.php, yang disebut "uploads", karena kita akan menyimpan file-file di sana.

Kita sekarang telah memiliki semua yang kita butuhkan untuk menyimpan file kita ke server.
$target_path memiliki jalur tempat kita menyimpan file.

Fungsi move_uploaded_file
Sekarang yang perlu kita lakukan adalah menggunakan fungsi move_uploaded_file dan
biarkan PHP menunjukkan keajaibannya. Fungsi move_uploaded_file perlu mengetahui :
1) jalur tempat file sementara /temporary (cek!)
2) jalur di mana akan dipindahkan (cek!).

SAMPL
SAMPL
E
E

201 Pemrograman Web


6 11 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
$target_path = "uploads/";

$target_path = $target_path .
basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']
['tmp_name'], $target_path)) {

echo "The file ". basename( $_FILES['uploadedfile']


['name']). " has been uploaded";

Jika peng-upload-an berlangsung dengan sukses, Anda akan melihat tulisan"The file filename
has been uploaded". Ini terjadi karena$move_uploaded_file akan menghasilkan true jika file
telah dipindahkan dan false bila terjadi masalah.

Jika terjadi kesalahan, akan ditampilkan pesan "There was an error uploading the file, please
try again!".

Safe Practices!
Catatan : Tulisan ini hanya untuk keperluan pendidikan. Kami tidak merekomendasikan file
ini untuk dipasang di halaman web untuk dilihat secara umum oleh publik.

Dengan beberapa baris kode yang telah diberikan, memungkinkan siapapun untuk meng-
upload data ke server Anda. Karena itu kami menyarankan Anda untuk memiliki file
uploader yang sederhana dan tersedia untuk publik secara umum. Atau Anda akan melihat
server Anda dipenuhi sampah atau keamanan server Anda terganggu.

Download File
Untuk Download, secara otomatis, bila web anda diletakkan dalam server dan mempunyai
link file ke file yang didownload, otomatis bila diklik akan dapat mendownload file. Jadi
tidak diperlukan script atau fungsi khusus, untuk download file.Jadi hanya dibuat file dengan
link

201 Pemrograman Web


6 12 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
<a href=/kumpulanfileupload/data.zip>download data</a>

Automatic download
Dengan menggunakan HTTP Header, kita bisa membuat aplikasi automatic download. Jika
pada aplikasi sebelumnya, file gambar (misal GIF) tidak bisa Anda buat menjadi bentuk
aplikasi download seperti kalau dengan file ZIP, maka kita bisa membuat download file GIF
seperti layaknya file ZIP. Dengan automatic download ini bisa juga digunakan untuk
memberikan fasilitas download file-file tertentu yang ingin kita sembunyikan address URL
aslinya di website kita, agar user tidak sembarangan mengambil file-file yang kita maksud
tersebut.

Kunci utama dalam membuat automatic download adalah menggunakan HTTP Header
dengan Content-Disposition: dan isinya adalah attachment. Kemudian kita tambahkan
informasi file yang akan di-downlaod tersebut. Untuk melengkapi HTTP Header ini bisa
ditambahkan informasi Content-type: dari file yang di-download tersebut.

Coba Anda pelajari contoh untuk membuat automatic download berikut ini :

SAMPL
<?
SAMPL
E
E // misalkan type MIME file tersebut : untuk gambar

header ( Content-type: image/gif );

// oleh browser akan dianggap file download (fotoku.gif)

header(Content-Disposition: attachment;
filename="fotoku.gif ');

Coba lakukan percobaan dari contoh dibawah ini :


Ada file untuk berisi daftar file yang bisa didowload, dimana file-file yang di-download
tersebut tersimpan dalam folder yang berbeda-beda. Tetapi URL untuk download memiliki
address URL yang sama, yaitu download.php. Hanya saja memiliki parameter argument
method GET yang berbeda-beda. Lihat saja coding berikut ini :

ListDownload.php

201 Pemrograman Web


6 13 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
<html><head><title>List Download</title></head>

<body>

Silahkan didownlaod pilihan file berikut ini : <br>

<a href="download.php?idfile=1" target="_self">File 1</a><br>

<a href="download.php?idfile=2" target="_self">File 2</a><br>

Dalam file ListDownload.php diatas menampilkan link untuk download, dimana semuanya
menuju download.php. Lihatlah, yang membedakannya adalah nilai argument URL idfile.
Tentunya parameter URL ini akan menjadi variable method GET yang akan diambil di file
download.php dan kemudian ditentukan file asli yang akan didownload. Tentu saja user tidak
akan tahu nama asli file yang akan di-download ini dan folder path dari file tersebut.

Perhatikan contoh teknik coding untuk melakukan automatic download berikut ini ! Dan
kemudian lakukan testing di komputer Anda. Jangan lupa buat folder dan letakkan file-file
yang akan didownload sesuai isi script PHP file download.php dibawah ini :
Download.php

201 Pemrograman Web


6 14 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
<?

if ($_REQUEST["idfile"] != "")

if ($_REQUEST["idfile"] == "1")

$filename = "fotoku.gif";

$folder = "gambarpribadi";

$ctype = "image/gif";

else if ($_REQUEST["idfile"] == "2")

$filename = "cvku.pdf";

$folder = "docpribadi";

$ctype = "application/pdf";

else if ($_REQUEST["idfile"] == "3")

$filename = "samplephp.php";

$folder = "codephp";

201 Pemrograman Web


6 15 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
(Gambar List link untuk download)

(Gambar proses download file GIF/PDF/PHP


selayaknya seperti proses download pada file ZIP)

Selamat Belajar... !

LATIHAN
1. Buatlah suatu website yang berisi beberapa file yang dapat didownload.Misalnya lagu
lagu MP3. Dan buatkan suatu link dan kemungkinan menyumbangkan atau mengupload
file MP3 yang baru dalam server PHP.

2. Semua mahasiswa diberikan hak untuk upload photo melalui web. Berikut ini form
HTML untuk upload :

<html><head><title>Soal 2</title></head>

<body>

<form method="post" enctype="multipart/form-data"


action="solusi2.php">

NPM : <input type="text" name="varNPM"><br>

Photo : <input type="file" name="varPHOTO"><br>

<input name="RESET" type="reset" value="RESET">


Upload photo ini hanya menerima file gambar bertype JPG (MIME type file JPG adalah
image/pjpeg). Setiap photo yang diupload disimpan di server dengan nama file sesuai
input NPM. Misal input NPM adalah 200512345, maka photo disimpan di server
dengan nama 200512345.jpg. Jika upload photo berhasil, maka akan ditampilkan pesan
Sukses upload photo Anda!. Sedangkan jika gagal atau tidak sesuai aturan upload photo
ini, maka ditampilkan pesan Gagal upload photo !

201 Pemrograman Web


6 16 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Coba tulis isi script solusi2.php untuk menyelesaikan soal ini !

Catatan :
Soal ini tidak ada hubungannya dengan database !

Jika upload berhasil, selain pesan sukses upload photo, coba tampilkan pula gambar photo
hasil upload tersebut.

Referensi
Jesus Castagnetto, Harish Rawat, Sascha Schumann, Chris Scollo, Deepak Veliath,
Professional PHP Programming, Penerbit Wrox Press Ltd,1999.

Raymond A. Lorie, Jean-Jacques Daudenarde SQL and Its Applications, Prentice Hall,
New Jersey, 1991.

Hengky Prihatna., Kiat Praktis Menjadi Web Master Profesional, Penerbit PT. Elex
Media Komputindo, Jakarta, 2005.

E-Media Solusindo, Seri Langkah langkah praktis, Web Master, Penerbit Anindya,
Jakarta, 2004

Lukmanul Hakim, Uus Musalini, 150 Rahasia dan Trik menguasai PHP, PT Elex
Media Komputindo, Jakarta, 2004

http://www.mysql.com

http://www.atlasindia.com/white.php

http://www.jguru.com

http://www.ilmukomputer.com

http://databases.about.com/mbiopages.htm

http://www.devshed.com/c/a/mysql/beginning-mysql

http://www.1keydata.com/sql/sqlorderby.htm

201 Pemrograman Web


6 17 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
201 Pemrograman Web
6 18 Fajar Masya
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id

Anda mungkin juga menyukai