Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Tutorial PHP: Pembuatan Situs Short URL (Pemendek URL)

Posted on July 22, 2013

URL Shortening atau layanan pemendek URL (link) adalah layanan yang memberikan sebuah link pendek dari suatu halaman web atau aplikasi web. Pertama kali dipopulerkan pada tahun 2001, dan mulai tersedia ke publik luas pertama kali oleh TinyURL pada tahun 2002. Sekarang telah lebih dari 100 macam penyedia terekspos ke publik, dan kepopulerannya kembali terangkat dengan hadirnya bit.ly pada tahun 2009 dan segera menjadi pemain utama.

Layanan pemendek URL ini sangat populer digunakan sebagai penghemat jumlah karakter pada layanan SMS atau social networking yang membatasi jumlah karakter seperti Twitter.

Belajar Membuat URL Shortening dengan PHP

Untuk membuat URL Shortening, kita dapat memanfaatkan class PHP berikut:
[sourcecode language=”php”]
<?php

/* Abstract class ShortUrl */

abstract class ShortUrl {

protected $data;

abstract protected function api();

abstract protected function execute($url);

public function getTinyUrl() {

return $this->data;
}

protected function get($url) {

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$data = curl_exec($ch);

curl_close($ch);

if(empty($data)) {return ‘Error retrieving data. Try again.’;}

else
{return $data;}
}

final protected function validUrl($longurl){

if(!preg_match(‘|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i’, $longurl)) {

throw new Exception("The url is not valid. Please try again.");
}
}
}

/* Concret class TinyUrl */

class TinyUrl extends ShortUrl {

private $url;

public function __construct($longurl) {

$this->validUrl($longurl);

$this->url = urlencode($longurl);

$apiurl = sprintf($this->api(),$this->url);

$this->execute($apiurl);
}

public function execute($url) {

$this->data = $this->get($url);
}

public function api() {

return "http://tinyurl.com/api-create.php?url=%s";
}

}

/* Concret class Bitly */

class Bitly extends ShortUrl {

private $longurl;

public function __construct($longurl,$user,$api) {

$this->validUrl($longurl);

$this->longurl = urlencode($longurl);

$apiurl = sprintf($this->api(),$this->longurl,$user,$api);

$this->execute($apiurl);
}

public function execute($url) {

$content = $this->get($url);

$xml = simplexml_load_string($content);

$shortUrl = $xml->results->nodeKeyVal->shortUrl;

$this->data = $shortUrl;
}

public function api() {

return "http://api.bit.ly/shorten?version=2.0.1&longUrl=%s&login=%s&apiKey=%s&format=xml";
}

}

/* Concret class Trim */

class Trim extends ShortUrl {

private $longurl;

public function __construct($longurl) {

$this->validUrl($longurl);

$this->longurl = urlencode($longurl);

$apiurl = sprintf($this->api(),$this->longurl);

$this->execute($apiurl);
}

public function execute($url) {

$content = $this->get($url);

$xml = new simpleXMLElement($content);

$shortUrl = $xml->url;

$this->data = $shortUrl;
}

public function api() {

return "http://api.tr.im/v1/trim_url.xml?url=%s";;
}

}

/* Concret class Isgd */

class Isgd extends ShortUrl {

private $longurl;

public function __construct($longurl) {

$this->validUrl($longurl);

$this->longurl = urlencode($longurl);

$apiurl = sprintf($this->api(),$this->longurl);

$this->execute($apiurl);
}

public function execute($url) {

$content = $this->get($url);

$this->data = $content;
}

public function api() {

return "http://is.gd/api.php?longurl=%s";
}

}

/* Concret class Unu */

class Unu extends ShortUrl {

private $longurl;

public function __construct($longurl) {

$this->validUrl($longurl);

$this->longurl = urlencode($longurl);

$apiurl = sprintf($this->api(),$this->longurl);

$this->execute($apiurl);
}

public function execute($url) {

$content = $this->get($url);

$this->data = $content;
}

public function api() {

return "http://u.nu/unu-api-simple?url=%s";
}

}

/* Concret class Digg */

class Digg extends ShortUrl {

private $longurl;

public function __construct($longurl,$apikey) {

$this->validUrl($longurl);

ini_set(‘user_agent’,’Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6′);

$this->longurl = urlencode($longurl);

$apiurl = sprintf($this->api(),$apikey,$this->longurl);

$this->execute($apiurl);
}

public function execute($url) {

$xml = file_get_contents($url);

$data = preg_match(‘/short_url="(.*)"/isU’,$xml,$matches);

$this->data = $matches[1];
}

public function api() {

return "http://services.digg.com/url/short/create?type=xml&appkey=%s&url=%s";
}

}

/* class Factory using method Factory*/

class Factory {

public static function create($name, $url, $user=”, $key=”) {

switch(strtolower($name)) {

case ‘bitly’:

$obj = new Bitly($url,$user,$key);

break;

case ‘tinyurl’:

$obj = new tinyUrl($url);

break;

case ‘trim’:

$obj = new Trim($url);

break;

case ‘isgd’:

$obj = new Isgd($url);

break;

case ‘unu’:

$obj = new Unu($url);

break;

case ‘digg’:

$obj = new Digg($url,$key);

break;

}//end switch

return $obj;
}

}

/* How to Usage */

/*
//Holds in variable ‘$longUrl’ the below address post
$longUrl = ‘http://www.wait-till-i.com/2009/11/02/getting-a-list-of-flickr-photos-by-location-andor-search-term-with-a-yql-open-table/’;

//$ob = Factory::create(‘bitly’,$longUrl,"thinkphp","R_0cf8415f0c3f9fcfd867ce7613e43fc7");
//$ob = Factory::create(‘tinyurl’,$longUrl);
//$ob = Factory::create(‘trim’,$longUrl);
//$ob = Factory::create(‘isgd’,$longUrl);
//$ob = Factory::create(‘unu’,$longUrl);
//$ob = Factory::create(‘digg’,$longUrl,"thinkphp","http://thinkphp.ro");

try {

$ob = Factory::create(‘bitly’,$longUrl,"thinkphp","R_0cf8415f0c3f9fcfd867ce7613e43fc7");

echo$ob->getTinyUrl();

}catch(Exception $e) {echo$e->getMessage();}

$output = highlight_file($_SERVER[‘SCRIPT_FILENAME’]);

echo$output;
*/

?>
[/sourcecode]

dan gunakan sebagai berikut:
[sourcecode language=”php”]
<?php

if($_POST[‘longUrl’] && isset($_POST[‘longUrl’]) && $_POST[‘submit’]) {

require_once(‘shortUrl.factory.class.php’);

$longUrl = $_POST[‘longUrl’];

$site = $_POST[‘shorts’];

if($site === ‘bitly’) {

$user = "thinkphp";

$apikey = "R_0cf8415f0c3f9fcfd867ce7613e43fc7";

} else if($site == ‘digg’) {

$apikey = "http://thinkphp.ro";
}

try {
$ob = Factory::create($site,$longUrl,$user,$apikey);

$shortUrl = $ob->getTinyUrl();

}catch(Exception $e) {$shortUrl = $e->getMessage();}

}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Shorten, share and track your links</title>
<link rel="stylesheet" href="http://yui.yahooapis.com/2.7.0/build/reset-fonts-grids/reset-fonts-grids.css" type="text/css">
<style type="text/css">
html,body{background:#C5C7BE;margin:0;padding:0;}

#doc{background:#fff;border:1em solid #fff;}

h1{font-family:Calibri,Arial,Sans-serif;font-size:200%;margin:0 0 .5em 0; padding:0;}

h2{font-family:Calibri,Arial,Sans-serif;font-size:150%;margin:1em 0;padding:0;font-weight: bold}

select,input{border: 1px solid #ccc;padding: 4px;margin: 4px;font-size: 40px;text-align: center}

label{margin-right: 10px}

input{margin-left: 28px}

input:focus{background: #E2FFC1}

input[id=shortUrl]{margin-left: 17px;}

form{background: #F9FFD7;padding: 30px}

#shortUrl{background: #F9FF93;padding-left: 30px;margin-top: 10px}

#shortUrl input{background: #fff}

#shortUrl label{font-weight: bold}

#ft{ color:#ccc;margin: 4px;font-size: 10px;margin-top: 20px}

#ft a { color:#ccc;}

</style>
</head>
<body>
<div id="doc" class="yui-t7">
<div id="hd" role="banner"><h1>Shorten, share and track your links</h1></div>
<div id="bd" role="main">
<div class="yui-g">

<form action="<?php echo$_SERVER[‘PHP_SELF’];?>" method="POST">

<p><label for="longUrl">Long URL</label><input type="text" name="longUrl" id="longUrl"></p><p><label for="shorts">Select service</label><select id="shorts" name="shorts"><option value="bitly">bit.ly</option><option value="tinyurl">tinyurl.com</option><option value="trim">tr.im</option><option value="isgd">is.gd</option><option value="unu">u.nu</option><option value="digg">digg.com</option></select><input type="submit" id="shortner" name="submit" value="shortUrl"></p>

</form>

<div id="shortUrl">

<label for="shortUrl">Short URL: </label><input id="shortUrl" type="text" value="<?php if(isset($shortUrl)) echo$shortUrl; ?>" >

</div>

</div>

</div>
<div id="ft" role="contentinfo"><p>Created By <a href="http://thinkphp.ro">Adrian Statescu</a></p></div>
</div>

</body>
</html>
[/sourcecode]

Install pada domain web yang singkat, misalnya test.web.id, lempar.co.cc, dll. Class PHP diatas mendukung 5 layanan pemendek URL, seperti: bitly,tinyurl,trim,is.gd,u.nu,goo.gl.

Terbaru

  • Video Melolo Cuma Layar Hitam? Ini Trik Ampuh Mengatasinya, Pasti Berhasil!
  • Mau Simpan Video Twitter dan TikTok Tanpa Aplikasi? Begini Cara Praktis Pakai VidsSave!
  • Mau Gaji Dolar? Gini Caranya Tembus Kerja di Australia, Jangan Sampai Salah Visa!
  • Belum Tahu? Inilah Fakta MigoReels, Katanya Nonton Drama Bisa Dapat Rp700 Ribu!
  • Apa Itu Event Invite Friends CapCut? Ini Pengertian dan Cara Kerjanya Biar Cuan
  • Apa Itu MJ di FF? Ini Pengertian, Asal-Usul, dan Risiko di Balik Istilah Tersebut
  • Apa Itu Pengertian Penonaktifan SPayLater? Ini Durasi Blokir Akibat Telat Bayar
  • Apa Itu Rasio Gambar Ukuran 1:1 di Canva? Ini Pengertian dan Cara Buatnya
  • Pengiriman Shopee Express Hemat itu Berapa Lama? Ini Pengertian dan Estimasi Sampainya
  • Android 2025: Aplikasi Baru dan Smartphone Impian yang Akan Datang!
  • Apa Itu Google AI Pro Ultra? Ini Pengertian dan Penjelasan Lengkapnya
  • Apa Itu Error Gagal Kirim Nilai RDM 3.1? Ini Pengertian dan Solusi Mengatasinya
  • Facebook Mulai Batasi Link Eksternal Cuma 2 Sebulan! Ini Trik Mengatasinya
  • Cara Nonton Tensura Season 4! Bakal Tayang April 2026 dengan Format 5 Cour
  • Belum Tahu? Inilah Trik Supaya Live TikTok Kalian Aman dan Banjir Cuan
  • Pixel 8 Dapatkan Mode Panorama Baru! Hasil Foto Lebih Luas & Lebih Kreatif
  • Apa Itu AppLocker? Ini Pengertian dan Cara Mengamankan Windows 11 Kalian dari Skrip Jahat
  • Cara Membuat Riwayat Copilot Kamu Tetap Bersih dan Rapi!
  • Game & Aplikasi Android Terbaik Saat Diskon Liburan Natal! Jangan Ketinggalan!
  • Apa Itu Game Prison Escape Journey? Ini Pengertian dan Cara Mainnya untuk Pemula
  • “Listrik Gratis” dari Solar Panel Cuma Mitos?! Ini Sisi Gelap PLTS
  • Samsung Galaxy Z-Fold: Uji Jatuh Bebas yang Mengguncang Keandalan Lipatannya
  • Google One 2026: Apa yang Akan Jadi Fitur Utama dan Harga yang Diharapkan?
  • Apa Itu Error 0x800704f8? Ini Pengertian dan Cara Mengatasinya
  • Android Akhirnya Dapat GPS Darurat di India! Setelah Hampir 10 Tahun
  • Apa Itu GetContact Premium? Ini Pengertian dan Cara Daftarnya
  • Android Maze Figure: Koleksi Baru Google yang Bikin Penggemar Bergairah!
  • Google Update Besar-besaran Desember 2025: Apa yang Akan Memengaruhi Pengalaman Anda?
  • Masih Pusing Hitung Gaji Manual? Waktunya Pakai Aplikasi HR
  • Apa Itu Dustruco? Ini Pengertian dan Cara Pasangnya di HP Kalian
  • Apa itu Cosmic Desktop: Pengertian dan Cara Pasangnya di Ubuntu 26.04?
  • Apa Itu Auvidea X242? Pengertian Carrier Board Jetson T5000 dengan Dual 10Gbe
  • Elementary OS 8.1 Resmi Rilis: Kini Pakai Wayland Secara Standar!
  • Apa Itu Raspberry Pi Imager? Pengertian dan Pembaruan Versi 2.0.3 yang Wajib Kalian Tahu
  • Performa Maksimal! Ini Cara Manual Update Ubuntu ke Linux Kernel 6.18 LTS
  • Begini Cara Menjalankan Notebook Machine Learning di Databricks, Gratis dan Tanpa Ribet!
  • Apa Itu PeakAI? Ini Pengertian dan Cara Menghasilkan Uang dari Kolaborasi TikTok
  • Inilah Cara Ubah Rutinitas Browsing Lebih Produktif dengan Perplexity Comet (AI Browser)
  • Inilah Cara Kuasai Materi Sulit dalam Hitungan Menit Pakai Google NotebookLM: Tutorial Lengkap
  • Inilah Cara Membuat AI Agent Cerdas dan Memantaunya Menggunakan LangGraph dan LangSmith
  • Apa Itu Raccoon0365? Ini Pengertian dan Bahaya Platform Phishing Microsoft
  • Apa Itu Raccoon Framework? Ini Pengertian dan Asal Usulnya
  • Apa Itu Serangan Phishing OAuth di Microsoft 365? Ini Definisi dan Cara Kerjanya
  • Apa Itu Distribusi Malware Via YouTube? Ini Pengertian dan Bahayanya Buat Kalian
  • Apa Itu Undang-Undang NDAA? Ini Pengertian dan Dampaknya Bagi Cyber Command Amerika Serikat
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2025 emka.web.id | Design: Newspaperly WordPress Theme