5

tinyurl dengan PHP dan SQLite

Kamis, 10 September 2009. Kategori : Tutorial || Download Versi PDFQR Code

Tutorial kali ini kita akan membuat aplikasi web yang mirip seperti tinyurl dengan PHP dan SQLite.
Apa itu tinyurl? Gampangnya adalah sebuah layanan yang menyingkat url panjang agar mudah diingat atau disertakan dalam media yang membatasi panjang tulisan (seperti twitter misalnya yang hanya menampung 140 karakter).
Lalu kenapa repot-repot? pakai saja tinyurl! Alasannya mudah, agar bisa promosi situs sendiri! (di media microblogging khususnya) haha..

Agar berfungsi sebagai layanan tinyurl, aplikasi yang dibuat harus memenuhi syarat-syarat berikut :

  1. Memendekkan url yang panjang menjadi pendek (jelas lah!)
  2. Arahkan ke url sebenarnya apabila dipanggil dengan cepat
  3. Tidak menerima duplikat url asli maupun url pendek
  4. Mampu mengecek apakah url asli benar-benar ada

Nah, agar berfungsi dengan baik maka PHP harus dilengkapi kemampuan untuk redirect (via header) dengan bantuan webserver (mod_rewrite pada Apache contohnya) dan penyimpanan data-data url (kita akan gunakan SQLite). Kenapa SQLite? Karena mudah dibuat dan cepat. Zenwalk 6.2 yang gw pake dalam tutorial ini menggunakan SQLite bawaan PHP 5.2.6.

Langkah pertama dari aplikasi tinyurl ini adalah mengecek apakah database sqlite ada atau tidak. Jika tidak ada langsung dibuat beserta tabelnya, jika ada lanjutkan keproses berikutnya.
//Membuat database, jika tidak ada langsung dibuat
$db = new SQLiteDatabase($namadb);

//Cek apakah tabel sudah ada
$cekdb = @$db->query('SELECT nomor FROM url');

//Tidak ditemukan tabel, mari kita buat baru!
if (!$cekdb) {
$buatabel = $db->query('CREATE TABLE url (nomor INTEGER PRIMARY KEY, shorturl CHAR(5), realurl CHAR(255))');
if (!$buatabel)
die('Tidak bisa membuat database!');
}

Selanjutnya adalah mengecek input dari pengunjung, jika memasukkan url pendek dan ada dalam database langsung arahkan ke url aslinya.
// Ada yang memanggil si pendek..!
if (isset($_GET['url']) AND !empty($_GET['url'])) {
$shorturl = RemoveXSS($_GET['url']); //Filter dulu

//Cek apakah shorturl tersebut ada dalam database?
$urlpanjang = $db->singlequery("SELECT realurl FROM url WHERE shorturl='$shorturl'");

//Jika ada buang ke realurl, jika tidak biarkan saja
if ($urlpanjang)
header('Location: '.$urlpanjang);
}

Jika tidak ada permintaan dari pengunjung marilah kita tampilkan form.
<label>Situs</label>
<input type="text" name="situs" class="teks" />
<input type="submit" name="bikin_pendek" value="Pendekin!" />

Jika form tersebut diisi oleh pengunjung, maka ada beberapa tahap yang akan dilakukan.
Pertama, filter input

if (isset($_POST['bikin_pendek']) AND !empty($_POST['situs'])) {
$realurl = RemoveXSS($_POST['situs']); //Filter input!
$realurl = 'http://'.str_replace('http://', '', $realurl); //Pastikan agar http:// disertakan! Sori, belum mendukung protokol https
}

Kedua, cek apakah url yang diberikan benar-benar ada (menggunakan fungsi get_meta_tags)

$cekurl = @get_meta_tags($realurl);

if (!$cekurl) {
echo 'Tidak ada situs dengan alamat '.$realurl.' !';
}
else {
//Lanjutkan ketahap ketiga
}

Jika ada maka proses tahap ketiga yaitu memasukkan data kedalam database tapi sebelumnya dicek apakah sudah ada data dengan url tersebut, jika tidak ada lanjutkan dengan membuat karakter random sebagai url pendek.

//Cek apakah url tersebut sudah ada..
$cek = @$db->singlequery("SELECT nomor FROM url WHERE realurl='$realurl'");

if ($cek)
echo 'Sudah ada yang memasukkan url tersebut!';
else {
$shorturl = buat_karakter(5); //Buat karakter random
while(!cekduplikat($shorturl, $namadb)) //Buat karakter random baru sampai tidak ditemukan dalam database..
$pendek = buat_karakter(5);

//Jika sudah, kita masukkan data kedalam database :
$buat = $db->query("INSERT INTO url (shorturl, realurl) VALUES ('$shorturl', '$realurl')");

echo ($db) ? $alamaturl.'/'.$shorturl : 'Gagal membuat shorturl!';
}

Selesai, sampai disini aplikasi seharusnya dapat berfungsi dengan baik.

Adapun untuk mod_rewrite yang disinggung diatas, kita harus membuat agar input dari pengguna dimengerti oleh aplikasi :
RewriteRule ^([a-z0-9]+)$ index.php?url=$1

Bingung? Pusing? Ya download saja yang sudah jadi :
Download ShortURL

Yang harus diganti ada difile index.php baris teratas :

/* Ganti variabel dibawah sesuai yang diinginkan */
$namadb = './dbsqlite.db';
$titleurl = 'url.jenggo.net';
$alamaturl = 'http://url.jenggo.net';
/* Setelah baris ini hampir tidak ada yang perlu diubah */

Dan pada file .htaccess :
RewriteBase /shorturl
Ganti variabel RewriteBase sesuai dengan direktori diletakkannya aplikasi ini.

Jika sudah, buka via browser dan aplikasi siap untuk digunakan.

5 Komentar

  • Gravatarneng oCHaKamis, 10 September 2009

    wahh, mas jenggo...makasih yah! kebetulan tugas akhir semester untuk mata kuliah pemrograman web saya pengen bikin shortened url... Grin

    trus, ini kalo pake mysql juga sama aja kan...? makasih bgt lho buat ilmunya Wink

  • GravatarjenggoKamis, 10 September 2009

    luar biasa kebetulannya.. haha..
    sama saja, tinggal ganti saja query sqlite kedalam bentuk mysql, atau pgsql, atau apapun bentuk database sql yang digunakan.
    no problem.. sukses ta-nya yak! Grin

  • GravatarmasoglekKamis, 10 September 2009

    hehe ilmu saya ndak nyampe

  • Gravatarprafangga permanaJumat, 11 September 2009

    wah masih garuk garuk nich, oon saya.
    rencana mo ngerjain make php juga tugas akhirnya.
    wah perlu banyak belajar nich

  • Gravatardj masterJumat, 23 Oktober 2009

    ulasan yang menarik.bravo

Tulis Komentar