Membuat short URL dengan PHP

Selamat siang agan-agan dan bro-bro sekalian, siang ini saya ingin bagi-bagi tutorial cara membuat shorten url atau cara membuat url pendek seperti punya google dengan php dari pada pakai orang kan bagus pakai domain kita hehehe, contoh dari link yang panjang kita ganti menjadi link yang pendek dan mudah di ingat gt low serta bisa attach domain kita sendiri sebagai linknya. Contoh link : http://mytutorialswebsite.blogspot.com/2014/02/instalasi-laravel-versi-4.html jadi http://www.domainkalian/hfajsj1 oke sekarang kita mulai tutorialnya.

Pastikan buat structure folder seperti berikut sebelum ke-syntac:
  1. Buat file index.php dan copy paste code berikut:
  2. <?php
    session_start();
    ?>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title>URL Shortener</title>
            <link rel="stylesheet" href="css/global.css">
        </head>
        <body>
            <div class="container">
                <h1 class="title">Shorten a URL</h1>
                <?php  
                    //session untuk menampikan url hasil generate
                    if(isset($_SESSION['feedback'])){
                        echo"<p>{$_SESSION['feedback']}</p>";
                        unset($_SESSION['feedback']);
                    }
                ?>
                <form action="shorten.php" method="post">
                    <input type="url" name="url" placeholder="Enter a URL here" autocomplete="off" required>
                    <input type="submit" value="Shorten">
                </form>
            </div>
            <footer>Created by: I Gede Depri Pramana</footer>
        </body>
    </html> 
    
    
    Ket: pada file index diatas ada Session yang akan digunakan untuk menyimpan data pada saat kita tekan post
  3. Buat file global.css untuk keperluan design dari file index.php, kalian bisa copy code berikut:
  4. body {
        font: 0.9em Tahoma, Sans-serif;    
    }
    
    .title{
        font-weight: normal;
    }
    
    .container{
        width: 100%;
        max-width: 600px;
        text-align: center;
        margin: 0 auto;
        margin-top: 15%;
    }
    
    input{
        padding: 10px;
        background-color: #fff;
        border: 1px solid #ccc;
        margin: 0;
    }
    input[type="url"]{
        width: 300px;
    }
    
    footer{
        bottom: 0px;
        right: 0px;
        padding: 20px;
        position: fixed;
        width: 100%;
        z-index: 1000 !important;
        text-align: center;
    }
    
  5. Buat database dengan nama db_shorten, Copy sql berikut:
  6. CREATE TABLE IF NOT EXISTS `links` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `url` varchar(255) NOT NULL,
      `code` varchar(12) NOT NULL,
      `created` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=100000005 ;
    
    
  7. Buat file Config.php untuk keperluan koneksi, kalian bisa copy syntax berikut:
  8. <?php
    
    // Define link server 
    // Shorten adalah nama folder kalau sudah online bisa di hapus jadikan http://'.$_SERVER['SERVER_NAME'] 
    // jadi link yang di hasilkan menjadi http://www.domainkalian.com/ahhskq
    define ("SERVER", 'http://'.$_SERVER['SERVER_NAME'].'/shorten');
    
    
    // Define database server
    define("DBSERVER",'localhost');
    
    
    // Define database username 
    define("DBUSER",'root');
    
    
    // Define database password
    define("DBPASS",'');
    
    
    // define database name
    define("DBNAME",'db_shorten')
    
    ?>
    
    
  9. Buat file class Shortener.php untuk mengelola koneksi sereta select,update dan generate code, kalian bisa copy syntax berikut:
  10. <?php
    require_once'class/Config.php';
    class Shortener{
        protected $db;
    
        public function __construct(){
            $this->db = new mysqli(DBSERVER,DBUSER,DBPASS,DBNAME);
        }
    
        protected function generateCode($num){
            //generate code berjumlah 6 digit.
            return base_convert($num, 10, 36);
        }
    
        public function makeCode($url){
            $url =trim($url);
            
            //Di gunakan untuk memfilter url yang dimasukan
            if(!filter_var($url, FILTER_VALIDATE_URL)){
                return '';            
            }
    
            $url = $this->db->escape_string($url);
            
            //check url jika sudah ada
    
            $exists = $this->db->query("SELECT code FROM links WHERE url='{$url}'");
    
            if($exists->num_rows){
                return $exists->fetch_object()->code;
            }else{
                $insert = $this->db->query("INSERT INTO links (url,created) VALUES ('{$url}',NOW())");
    
                //generate code by id
                $code = $this->generateCode($this->db->insert_id);
    
                ///Update 
                $this->db->query("UPDATE links SET code ='{$code}' WHERE url='{$url}'");
    
                return $code;
            }
        }
    
        public function getUrl($code){
            $code = $this->db->escape_string($code);
            $code = $this->db->query("SELECT url FROM links WHERE code = '{$code}'");
    
            if($code->num_rows){
                return $code->fetch_object()->url;
            }
    
            return '';
        }
    }
    ?>
    
  11. Buat file shorten.php untuk menerima data post dari file index, kalian bisa copy syntax berikut:
  12. <?php
    session_start();
    require_once'class/Shortener.php';
    
    $s = new Shortener;
    
    if(isset($_POST['url'])){
        $url = $_POST['url'];
        if($code=$s->makeCode($url)){
            $_SESSION['feedback']="Generated: Your short URL is:
            <a href=\"".SERVER."/{$code}\">".SERVER."/{$code}</a>";
        }else{
            $_SESSION['feedback'] = "Tolong masukan link URL yang benar !!!";
        }
    }
    
    header("location: index.php");
    ?>
    
  13. Buat file redirect.php untuk menjalankan link pada saat di click, kalian bisa copy syntax berikut:
  14. <?php
    require_once 'class/Shortener.php';
    
    if(isset($_GET['code'])){
        $s= new Shortener;
    
        $code= $_GET['code'];
    
        if($url= $s->getUrl($code)){
            header("Location: {$url}");
            die();
        }
    }
    
    header("Location: index.php");
    ?>
    
  15. Buat file .htaccess untuk memparsing data dari redirect.php, kalian bisa copy syntax berikut:
  16. 
    RewriteEngine On
    RewriteRule ^([a-z0-9]+)$ redirect.php?code=$1
    

Hasil Akhirnya akan seperti berikut:
  1. Pertama masukan url contoh : http://www.mytutorialswebsite.com/2014/02/instalasi-laravel-versi-4.html


  2. Setelah di submit akan mendapatkan link : http://localhost/shorten/1njchx , jika link yang sudah di generate lagi di masukan akan mendapatkan link yang sama pada saat generate pertama
  3. Data yang sudah dimasukan akan di simpan di dalam database bisa di lihat capture berikut:
Oke demikian dulu tutorials nya yah,
Salam Hangat,
Depri Pramana

63 komentar

bagus mas,
keep up :)

Masukan lewat PHPmyadmin nya mas, seperti dengan localhost. di Import.

caranya lengkap banget gan tapi ane masih harus belajar banyak, maklum newbie :D

Ok Gan silakan belajar, Maap belum sempet2 update blog.

ga work ketika di uplod ke hosting.
Not found terus
paadahal .'/shorten' udah dihapus

Oke sory om, sudah bisa.
tapi pertannyaan saya apakah generateCode nya ga bisa bervariasi(Ramdom)?
soalnya code return base_convert($num, 10, 36); cuma blakangnya saja yang berbeda
misal "1jhpllq" link ke dua jadi "1jhpllt" .

mohon pencerahan

<?php
function RandomString()
{
$characters = ’0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;
$randstring = '';
for ($i = 0; $i < 10; $i++) {
$randstring = $characters[rand(0, strlen($characters))];
}
return $randstring;
}
RandomString();
echo $randstring;


Silakan pakai kode diatas

Mantap....caranya lengkap banget gan tapi ane masih harus belajar banyak, maklum newbie.
Gan, mau nanya utk email servernya apa bisa digunakan utk receive dan sending Tanpa domain atau email lain...?

Mantap....caranya lengkap banget gan tapi ane masih harus belajar banyak, maklum newbie.
Gan, mau nanya utk email servernya apa bisa digunakan utk receive dan sending Tanpa domain atau email lain...?

Thanks Gan, Selalu kemarin gan

bisa gak kalau email ini di pakai untuk kirim dan menerima ke gmail atau yahoo

Bisa aja Gan, Tinggal Tambah kan perintah
if(isset($_POST['url'])){
$url = $_POST['url'];
if($code=$s->makeCode($url)){
$_SESSION['feedback']="Generated: Your short URL is:
<a href=\"".SERVER."/{$code}\">".SERVER."/{$code}</a>";

$name =$_POST['name'];
$email =$_POST['email'];
$subject ='Generate Short Link';
$to =$email;

$link = <a href=\"".SERVER."/{$code}\">".SERVER."/{$code}</a>";

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
// More headers
$headers .= 'From: mytutorialswebsite.com <noreply@mytutorialswebsite.com>'."\r\n" . 'Reply-To: '.$name.' <'.$email.'>'."\r\n";
$headers .= 'Cc: admin@yourdomain.com' . "\r\n"; //untuk cc lebih dari satu tinggal kasih koma
@mail($to,$subject,$message,$headers);
if(@mail)
{
echo "Email sent successfully !!";
}

}else{
$_SESSION['feedback'] = "Tolong masukan link URL yang benar !!!";
}
}


mysql -u root -p
Password :
Error...
passwordnya yang mana???
123456 sama password root salah

mysql -u root -p
Password :
Error...
passwordnya yang mana???
123456 sama password root salah


// Define database server
define("DBSERVER",'localhost');


// Define database username
define("DBUSER",'root');


// Define database password
define("DBPASS",'');


// define database name
define("DBNAME",'db_shorten')



Di setting dulu user dan password nya di bagian ini.

Gan Kok Pas Bagian shorten.php Error?

Nih SSnya : http://i.imgur.com/0r1YVhq.png

itu error nya di class config nya yang gk ketemu, coba liat struktur dari folder nya.

Mantap gan, thanks untuk bimbingan nya, semoga ilmu ente makin bertambah dengan saling berbagi ilmu ke yang lain.

Mantap gan, thanks untuk bimbingan nya, semoga ilmu ente makin bertambah dengan saling berbagi ilmu ke yang lain.

Halo Muhammad,

Extensi apa yah? Kali ini tidak extensi cuma pakai oop aja Pak.

Gan kalau panjang karakter bisa di rubah gak jadi 1000000
ane submit contoh :

contohdomain.com/8e7c6yOlGETaB8WWBxdJH_qWaZgxR_2SWAAr5_unqdv2Ym5-NrB4-7mn3dNgX5NwSA7vVJglmskGCS0u3IX52EBV9W1ktjHfv7DZq_baMNn0Frr3HW4cqv8j3k5bS0zNLplG28G3euK8Rx173q0K0LFWefbCNev_YYqZ0W579xvGKlQtXdJlxX66sNyHhXNxvifNm77zgqGGI2sF0yQ176Hlz-gGjRngjy_Hnzs-gtQBUD4G3ad8Xd3XLHT_CdfKs9gmJPzNIlaq0E-jYyO24LZoArF85dkXsEJMtJSCrwfrrWGNuYLONufP_oUy12-8eoZEDMpBEOnEkwIbXhr2MfJWJq34-Dk0rTZlJZ7GldFw0bsRabHvE9pmqYWojt_dO4nRKqd6h04OZRp842yzYk4WggT4o2t68N97qT8MAjIfFTRsmfhABYpGwFpYRCmobrDlODAmRjl4NyjkYfNk6PQWysN17b8gVeRW_JyZt91GYt-cr2Q7pU-MQnvHDlA1M8HA_5sezyZzhLMocLRi9fCFXx2K0QN_R-ALidtirI6nCuMBqPywWQZdbPBWLkW_T0i6QDA9yWhkCwtSEzbFMKAG_ecBIU

itu balik lagi ke index, gimana agar bisa jalan ya ?makasih


protected function generateCode($num){
//generate code berjumlah 6 digit.
return base_convert($num, 10, 36);
}


Bosa aja di modify code ini aja. tapi kalo panjang seperti itu gak short URL dukz namanya

maksud nya link diatas itu source linknya, nah ini mau di short malah balik lagi ke index gan

Itundi database nya di bagian URL kan pakai type data varchar 255 ganti pakai text aja.

sip gan udah bisa thanks ya ,,,,

limitan queue nya mana om.. ?

Limited queue yg bagaimana @riswan

gan, setelah ane short dan upload ke hosting. shorten.php blank dari short index

Ada Screen shot nya gk gan. Seharusnya sih gk blank gan

Nanya bro, ane udah setting parentnya tapi di winbox kok gak keliatan nestednya ya ?

This comment has been removed by the author.

Nanya bro, udah ane setting parentnya kok gak keliatan nestednya di winboxnya ?
Thx

Ntaps jiwa dah bang keren abis blognya semoga tmbh keren dh

gan ini gak support php versi 5.6 ya ? waktu nyoba malah blank pas generate url nya

elum sempat coba di versi 5.6 gan, biasanya ada error kalo gk support. coba di inspect element.

Materi Arsitektur Komputer terlengkap, dapat dijumpai disini http://mycomputerarchitecture.blogspot.co.id/

Ini sangat membantu saya dalam belajar

Ini untuk mangle nya mana gan? Thanks atas blesannya

Maksudnya buat apa bagi banwid lokal dan internasional segala yaa?? Bukanya cukup itu bagi banwid brwosing dan game saja

Hahaha ending yg bagus wkekwkw

makasih banyak sudah share min, makasih banyak ilmunya
alat pemisah lcd

maaf, msih newbie.. itu settingnya harus per/client? ga bisa misal targetnya 192.168.1.2 sampai 192.168.1.253? saolnya IP di warnet saya ngacak.

Ip yg dimagsud apa? kalo access nya buat IP server nya saja mas

This comment has been removed by the author.
This comment has been removed by the author.
This comment has been removed by the author.

Silakan Berikan Komentar anda yang bisa mendukung blog ini, komentar anda saya harapkan, terima kasih
EmoticonEmoticon