Tampilkan postingan dengan label PHP. Tampilkan semua postingan
Tampilkan postingan dengan label PHP. Tampilkan semua postingan

Kamis, 07 Juni 2018

Membuat Thumbnail Image Dengan PHP dan ImageMagick


Entah anda sekarang ini lagi bikin situs media sosial atatupun lagi bikin CMS; kode untuk membuat thumbnail harus anda ketahui. Thumbnail diperlukan untuk memberikan kesan power-text pada situs web, sehingga akan tampak lebih interaktif di mata penggunanya.

Untuk membuat thumbnail image dengan PHP, kita bisa memanfaatkan salah satu library pengolah grafis yang sudah banyak di-include di PHP. Library yang sudah umum dan biasanya digunakan untuk membuat thumbnail adalah GD dan ImageMagick.

Pada tulisan kali ini, kita akan membuat thumbnail di PHP dengan ImageMagick, karena ImageMagick lebih mudh dan sederhana jika dipilih untuk memproses gambar dalam resolusi besar menjadi berukuran thumbnail yang beresolusi lebih kecil.

Membuat thumbnail di PHP ataupun di bahasa pemrograman lainnya, sebenarnya prinsipnya sama saja. Thumbnail hanyalah bentuk gambar dalam resolusi kecil dan seragam. Artinya, thumbnail dihasilkan hanya dengan mengubah ukuran/resize gambar utama.

Masalahnya, gambar input yang harus dijadikan thumbnail umumnya memiliki rasio panjang x lebar yang tidak seragam. Sehingga, selain melakukan resize, gambar thumbnail yang akan dihasilkan sebelumnya harus di-crop dulu.

Algoritma untuk cropping simple kok. Ilustrasinya seperti gambar di bawah ini.

  Jika panjang (width) > tinggi (height), crop agar width = height. Offset pemotongan horisontal dihitung = (width - height) / 2.


Jika panjang (width) < tinggi (height), crop agar height = width. Offset pemotongan vertikal dihitung = (height - width) / 2.


function draw_thumbnail($file, $sz){
    $image = new Imagick($file);
    $w = $image->getImageWidth();
    $h = $image->getImageHeight();
    if($w > $h){
        $image->cropImage($h,$h,(($w-$h) / 2),0);
    } else if($w < $h){
        $image->cropImage($w,$w,0,(($h-$w) / 2));
    }
    $image->resizeImage($sz,$sz,Imagick::FILTER_LANCZOS,1);
    $image->setImageFormat('jpg');
    header('Content-type: image/jpg');
    echo $image;
}


Mudah sekali, kan? banyak programmer malah menggunakan library cuma untuk membuat thumbnail, padahal jika mau, kita hanya butuh beberapa baris kode di atas untuk melakukannya.

Contoh implementasi berikut akan memubuat thumbnail dari gambar contoh.png agar berukuran 50x50 px.

draw_thumbnail("/var/www/html/contoh.png",50);

Selamat mencoba...

Read more

Rabu, 27 September 2017

Menghitung Pengunjung Online Realtime Auto Refresh

Setelah sebelumnya kita membahas tentang Menghitung Pengunjung Online Dengan PHP dan SQLite, maka sekarang ini kita akan mengembangkan kode sebelumnya menjadi lebih dinamis. Umumnya online visitor counter tidak menyediakan layanan untuk menghitung jumlah pengunjung online secara realtime. Sehingga membuat online visitor counter sendiri harus dilakukan jika ingin melihat visitor counter berjalan realtime. Maksud realtime adalah keterangan jumlah pengunjung online akan berubah atau refresh sendiri saat jumlah pengunjung online bertambah/berkurang.

Sebelum Anda bisa mencoba kode berikut, pastikan anda sudah membaca artikel berjudul Menghitung Pengunjung Online Dengan PHP dan SQLite. Artikel ini sebenarnya hanyalah pengembangan dari artikel tersebut.

Dari kode sebelumnya, kita hanya perlu mengubah javascript agar dapat melakukan refresh dalam kurun waktu tertentu. Di sini saya memilih interval 10.000 ms, sehingga jumlah pengunjung online akan diperbarui secara realtime tiap 10 detik.

Untuk mendukung proses realtime; fungsi refresh dengan setTimeout() yang disediakan javascript bisa digunakan. Prototype-nya adalah sebagai berikut.

setTimeout(function, interval);

Sehingga jika dikolaborasikan dengan script online visitor counter sebelumnya, hasilnya akan menjadi seperti berikut:


<div id='online'></div>
<script>
 function print_online(){
  var xmlHttp = new XMLHttpRequest();
  xmlHttp.onreadystatechange = function() { 
   if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
    document.getElementById('online').innerHTML = xmlHttp.responseText + " pengguna online";
   }
  }
  xmlHttp.open("GET", "http://localhost/online.php", true);
  xmlHttp.send(null);
  setTimeout(print_online,10000);
 }
 print_online();
</script>

Tidak berbeda jauh, bukan?
Sangat simpel, hanya dengan menabahkkan beberapa baris kode di atas anda sudah bisa membuat realtime online visitor counter untuk website/blog anda. Selamat mencoba.
Read more

Menghitung Pengunjung Online Dengan PHP dan SQLite

Jika anda memiliki website besar, anda pasti merasa percaya diri untuk menampilkan jumlah pengunjung online di website anda. Jangan biarkan trafik anda turun gara-gara loading halaman lambat. Perlu diketahui bahwa salah satu penyebab lambatnya loading website adalah terlalu banyak menggunakan script yang berjalan pada client-side (mis: javascript). Selain itu, terlalu banyak melakukan query database juga menyebabkan lambatnya loading website.

Umumnya, website kelas personal (blog) masih menampilkan jumlah pengunjung online / online visitor count dengan layanan counter gratis; misalnya seperti supercounters.com. Tanpa disadari, hal ini sangat empengaruhi waktu loading halaman web. Apalagi layanan seperti itu memiliki banyak user yang menginginkan jumlah pengunjung online dalam waktu yang sama. Ini membuat beban server penyedia online visitor counter lebih berat dan berimbas pada waktu load website anda sendiri.

Jika anda memiliki hosting sendiri, lebih baik anda membuat online visitor counter sendiri. Tapi jika tidak punya, ada banyak hosting gratis bisa anda coba; misalnya 3owl.com.

Membuat online visitor counter sendiri memang agak merepotkan. Tapi jika melihat script visitor counter yang bekerja dengan SQLite, membuat online visitor counter sendiri perlu dipertimbangkan. Ini karena, menurut beberapa referensi, SQLite mampu bekerja lebih cepat dalam mengolah database (link referensi). Jadi, memasang online visitor counter berbasis SQLite bisa dipastikan akan mempengaruhi waktu loading halaman web anda.

counter.php
Kode berikut ini adalah inti utama dari proses perhitungan pengunjung online. Setiap pengunjung yang mengakses website dibedakan berdasarkan alamat IP. Adapun tahapan proses yang dilakukan oleh kode ini adalah
- Memperoleh alamat IP pengunjung ($ip)
- Memperoleh waktu akses pengunjung ($curtime)
- Memperoleh waktu 3 menit yag lalu ($lowtime)
- Memeriksa apakah online.db sudah dibuatkan tabel 'counter'. Jika belum ada, buat!
  $db->exec("CREATE TABLE IF NOT EXISTS `counter` ...
- Memasukkan $ip dan $curtime pengunjung ke database  jika belum ada. Jika sudah ada, update kolom lastaccess dengan $curtime.
  $db->exec("INSERT OR REPLACE INTO counter ...
- Menghapus data pengunjung yang sudah 3 menit tidak melakukan aktivitas:
  $db->exec("DELETE FROM counter WHERE lastvisit < '$lowtime'");
- Menghitung jumlah pengunjung yang sedang aktif dalam kurun waktu 3 menit terakhir
  $res = $db->query("SELECT COUNT(ip) AS count from counter");

<?php
function get_online(){
 $ip = $_SERVER['REMOTE_ADDR'];
 $curtime = date("Y-m-d H:i:s");
 $lowtime = date("Y-m-d H:i:s", strtotime("-3 minutes"));

 $db = new SQLite3(dirname(__FILE__)."/online.db");
 $db->exec("CREATE TABLE IF NOT EXISTS `counter` (
   `ip` varchar(60) NOT NULL,
   `lastvisit` DATETIME NOT NULL,
   UNIQUE(`ip`)
 )");

 $db->exec("INSERT OR REPLACE INTO counter (ip,lastvisit) VALUES('$ip','$curtime')");
 $db->exec("DELETE FROM counter WHERE lastvisit < '$lowtime'");
 $res = $db->query("SELECT COUNT(ip) AS count from counter");
 $row = $res->fetchArray();
 return $row['count'];
}
?>

online.php
Kode ini akan mencetak angka dari counter.php
<?php
include 'counter.php';
echo get_online();
?>

Di halaman anda
Di setiap halaman anda, patikan anda menyisipkan kode ini di sekitar tag <body>. Jumlah pengunjung online akan diperoleh dari online.php dan dicetak pada elemen <div id='online'></div>.
...
<div id='online'></div>
<script>
 var xmlHttp = new XMLHttpRequest();
 xmlHttp.onreadystatechange = function() { 
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
   document.getElementById('online').innerHTML = xmlHttp.responseText + " pengguna online";
  }
 }
 xmlHttp.open("GET", "http://DOMAIN-ANDA.com/online.php", true);
 xmlHttp.send(null);
</script>
...


Hasilnya
Saya sudah mencoba kode ini di localhost dan di website saya sendiri (link). Hasil screenshot di localhost terlihat seperti berikut:

Yap, itu tadi adalah sedikit tutorial singkat mengenai cara menghitung jumlah pengunjung online atau yang biasa disebut sebagai online visitor counter. Mudah-mudahan bermanfaat.
Read more

Jumat, 22 September 2017

Cara Membuat Youtube Downloader (Seperti Savefrom.net) Dengan PHP


Setelah kemarin saya menguraitutorial singkat mengenai cara membuat syntax highlighter dengan PHP, kali ini saya akan membahas 1 lagi tutorial lebih keren. Tulisan ini akan membahas tutorial membuat youtube downloader dengan PHP (mirip savefrom). Karena tidak mau repot, sekali lagi saya menggunakan class Youtube Downloader yang saya peroleh dari github (link).

Cara penggunaannya sangat mudah, lho:

<?php
$youtube = new Zarkiel\Media\Youtube();
$links = $youtube->getDownloadLinks('kode_video_id');
?>

Dari eksekusi kode di atas, kita sudah bisa memperoleh array link berisi berbagai direct link video yang diminta dalam berbagai kualitas resolusi dan format yang berbeda. Contoh output yag bisa diperoleh adalah:

Array
(
    [MP4] => Array
        (
            [High Quality - 1280x720] => http://...
            [Medium Quality - 480x360] => http://...
        )

    [FLV] => Array
        (
            [Low Quality - 400x226] => http://...
        )

    [3GP] => Array
        (
            [High Quality - 320x240] => http://...
            [Medium Quality - 176x144] => http://...
        )

    [WEBM] => Array
        (
            [Low Quality - 640x360] => http://...
        )
)

Class Youtube downloader PHP ini bekerja berdasarkan video id youtube. Tiap kita menonton sebuah video, kita bisa melacak ID tersebut pada URL nya. Misalnya adalah pada teks tercetak tebal di URL youtube : https://www.youtube.com/watch?v=tPEE9ZwTmy0.

Untuk memudahkan proses ekstraksi/mengambil ID video youtube dari URL, saya menggunakan fungsi berikut:

function get_yt_id($url){
 if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match)) {
  $id = $match[1];
  return $id;
 } else return NULL;
}

Jika ID video sudah diperoleh, kita tinggal menyampaikan nilai ID tersebut ke dalam class. Jika ingin menambilkan thumbnail video tak usah repot-repot; gunakan link https://i.ytimg.com/vi/ID_VIDEO/hqdefault.jpg.

Singkatnya, dari sebuah link youtube, script youtube downloader dapat mengekstrak link download dengan kode berikut.

$id = get_yt_id($_POST('url')); // link video input
$youtube = new Zarkiel\Media\Youtube();
$links = $youtube->getDownloadLinks($id);

echo "<center>
<img src='https://i.ytimg.com/vi/$id/hqdefault.jpg' style='max-width:300px;display:block;border-radius:6px;' class='mb-3'></img>
<div class='btn-group-vertical'>";
foreach($links as $a => $b){
 
 foreach($b as $c => $d){
  echo "<a class='btn btn-primary mb-2' href='$d'>Download $a $c</a>";
 }
}
echo "</div></center>";

Cara mengekstrak aray link hasil pencarian link adalah dengan metode looping mengguakan foreach. Dengan melihat contoh output struktur yang saya perlihatkan di atas tadi, tentunya kita bisa menginterpretasikan contoh di atas dengan mudah, terutama saat mengolah array yang berisi link-link download.

foreach($links as $a => $b){
 foreach($b as $c => $d){
  echo "<a class='btn btn-primary mb-2' href='$d'>Download $a $c</a>";
 }
}

Variabel $a menampung nama format video (MP4/FLV/3GP/...), $b berisi array link yang tergolong sebagai format video sesuai $a. Karena $b masih berbentuk array, kita perlu memecahnya lagi sehingga diperoleh $c sebagai detail format (misal: High Quality - 1280x720) dan $d sebagai link downloadnya.

Contoh implementasinya sudah saya buat di link website Youtube downloader milik saya (http://tools.komputoo.pw/youtube-downloader). Dari pembutan project script youtube video downloader ini, saya menilai bahwa cara membuat situs youtube downloader seperti savefrom bukanlah hal yang sulit jika kita mau memanfaatkan class/library gratis dari internet.

Saya kira anda pun bisa membuat situs untuk menyaingi savefrom. Apalagi class Youtube downloader ini sagat sederhana, ukurannya tidak lebih dari 10 KB. Sangat mudah untuk dipelajari bagimana mendapatkan direct link video youtube secara programatis.
Read more

Rabu, 20 September 2017

Cara Membuat Syntax Highlighter Dengan PHP

Saya mulanya terinspirasi hilite.me, sebuah situs sederhana yang menawarkan online syntax highlighter. Mulailah saya menelusuri github dan google untuk mempermudah keinginan saya membuat situs serupa.


Daru upaya ini, saya menemukan Highlight.php dari github (link), sebuah script class PHP untuk mempermudah pembuatan online syntax highlighter. Menurut pemegang kendali project ini, highlight.php merupakan pengembangan dari kode proyek highlight.js (link) yang sudah ada sebelumnya.

Dengan memakai bantuan class milik highlight.php, membuat syntax highlighter dengan PHP menjadi sangat mudah. Bahkan saya sudah membuatnya dan menjalankannya sebagai salah satu tools milik Komputoo (http://tools.komputoo.pw).

Berikut ini contoh kode implementasi syntax highlighter yang saya copy dari highlight.php.

<?php
require_once("Highlight/Autoloader.php");
spl_autoload_register("Highlight\\Autoloader::load");

$hl = new Highlight\Highlighter();
$r = $hl->highlight("html", file_get_contents(__FILE__));

?>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="styles/default.css">
    </head>
    <body>
        <pre><code class="hljs <?=$r->language?>"><?=$r->value?></code></pre>
    </body>
</html>

Yang paling pertama, kita harus meng-include source code Autoloader.php dan mendaftarkan autoload; agar bisa menggunakan class milik highlight.php.

require_once("Highlight/Autoloader.php");
spl_autoload_register("Highlight\\Autoloader::load");

Lalu buat objek highlight.php baru.

$hl = new Highlight\Highlighter();

Objek inilah yang bisa kita gunakan untuk melakukan syntax highlighting.

$r = $hl->highlight("<jenis syntax kode>", "<source code yang ingin di-highlight>");

Hasil dari proses highlight tersebut bisa diekstraksi dengan mudah.

$r->language --> jenis syntax yang barusan di-highlight
$r->value --> kode HTML yang sudah siap ditampilkan 

Sehingga, jika digabungkan...

<pre><code class="hljs <?=$r->language?>"><?=$r->value?></code></pre>

Selain mudah, highlight.php juga saya akui lengkap fiturnya. Saya bismemilih banyak sekali tema syntax yangsudah disediakan olehnya. Untuk menggunakan tema tersebut, janga lupa include CSS sebelum kode hasil di-plot.

<link rel="stylesheet" type="text/css" href="styles/default.css">

Anda bisa mengubah style default.css dengan style lain yang anda suka. Hasilnya, syntax highlighter online yang berhasil saya buat nampak seperti berikut (link demo).



Yap, sekian dulu tutorial singkat dari saya mengenai cara membuat syntax highlighter dengan PHP. Selamat mencoba :)
Read more

Minggu, 17 September 2017

Cara Mengatur Cron Job CodeIgniter Dari cPanel

Biasanya, script PHP bisa dijalankan dengan cron melalui beberapa metode. Bisa dengan fetching alamat web dengan command  wget atau curl. Atau dengan menjalankan script yang diinginkan dengan metode CLI melalui command php.

0 0 * * * /usr/bin/curl http://web-url/cron.php
0 0 * * * /usr/bin/wget http://web-url/cron.php

0 0 * * * /usr/bin/php /path/to/cron.php

Menurut saya, metode dengan command PHP jauh lebih efektif. Karena di antara ketiga metode, cara ini tidak akan dipengaruhi oleh timeout server. Jadi, jika kerja cron membutuhkan waktu lama dan rentan terkendala timeout, metode ini sangat cocok untuk diterapkan.

Umumnya script untuk cron ditulis sebagai path ke program php dan diikuti script cron yang perlu dijalankan. Misalnya

0 0 * * * /usr/bin/php /path/to/cron.php

Tapi bagaimana cara kita memanggil method dari controller CodeIgniter dari cron?

Mudah saja, penulisannya sama seperti contoh di atas. Namun script yang dituju bukanlah controller, melainkan index.php. Sementara itu, controller dan method yang diakses juga disertakan sebagai parameter untuk command cron.

0 0 * * * /usr/local/bin/php /home/thuglife/public_html/index.php controller method ...


Penting untuk diingat bahwa anda harus menggunakan php dari sisi lokal (/usr/local/bin/php). Jika tidak, cron hanya bekerja seperti mengakses homepage / default contoller codeigniter. Mungkin jika cron hanya dibuat di komputer sendiri tidak akan ada pengaruhnya. Tapi, script cron akan bermasalah dan menampilkan default controller / home page apabila berjalan pada shared hosting.


Read more

Sabtu, 09 September 2017

Cara Mudah Grab Konten Blog Orang Dengan PHP

Komputoo sudah lahir sejak beberapa tahun yang lalu, sampai sekarang masih kurang dari 300 artikel yang berhasil diterbitkan. Ada saja perasaan malas untuk melanjutkan blogging, tapi dengan dedikasi dan percaya bahwa kerja kerasa tidak akan pernah ada ruginya; Komputoo tetap setia berada di internet menyajikan informasi dan tutorial berkualitas. :D

Sebagai gantinya, rasa malas itu mulai dimanfaatkan penulis ke arah lebih positif. Rasa malas tersebut melahirkan ide untuk membuat grabber blog berbasis PHP dan RSS. Tidak sulit membuat grabber, apalagi jika sudah memiliki pengalaman dalam pemrograman OOP. Salah satu objek grabber yang bisa diambil peluangnya adalah RSS(Really Simple Syndication) yang hampir semua situs maupun blog memilikinya.


Untuk melihat RSS tiap blog, kita cukup melihat kode sumber laman dari blog target.


Contoh kode meta RSS adalah sebagai berikut:

<link href='http://www.blogger.com/feeds/5968298389595427058/posts/default' rel='alternate' title='Komputoo Tech - Atom' type='application/atom+xml'/>

Jangan senang dulu, metode grabber melalui RSS kadang butuh keberuntungan. Karena tidak semua blog menyajikan seluruh konten dalam deskriptor RSS. Sering kali hanya ringkasan. Jika target dirasa sudah tepat, buka URL RSS dan kopi semua kodenya di https://codebeautify.org/xmlviewer. Klik Tree View dan pelajari struktur RSS tersebut.


Kode RSS tersaji dalam format XML; dan cara termudah mengolahnya adalah dengan SimpleXML. Berikut referensinya:

http://php.net/manual/en/book.simplexml.php

$rss = simplexml_load_file('URL RSS');
$namespaces = $rss->getNamespaces(true);
$items = $rss->channel->item;
foreach ($items as $item){
 $content->title = $item->title;
 $content->content = $item->children($namespaces['atom'])->summary;
 $content->source = $item->link;
 $content->date = date("Y-m-d", strtotime($item->children($namespaces['atom'])->updated));
 $content->uid = md5($content->source);
 $content->image = $item->children($namespaces['media'])->thumbnail->attributes()->url;
 $content->dump();
 //Tambahkan fungsi untuk memasukkan $content ke database
 echo "<hr/>";
}

Langkah paling awal dalam proses grabber adalah mengunduh kode XML dari RSS dan menjadikannya sebagai objek.

$rss = simplexml_load_file('URL RSS');

Biasanya aanda akan menemukan kode tag XML <dc:creator></dc:creator> dalam RSS. untuk mengakses tag ini, anda harus memproses namespaces terlebih dahulu.

$namespaces = $rss->getNamespaces(true);

Jika sudah, perhatikan baik-baik struktur RSS yang sudah kita lihat di awal. Umumnya, konten posting blogger tersaji dalam bentuk array di bawah $rss->channel->item.

Karena array, kita jadi lebih mudah memilah-milahnya dengan foreach.

foreach ($items as $item){
 //lakukan sesuatu untuk tiap $item
}

Komponen posting tanpa namespavces bisa diakses seperti mengakses objek biasa, contohnya saja $item->title untuk judul. Tapi, kalau sudah berhadapan dengan namespace, mau tak mau gunakan kode yang agak lebih panjang.

<title>Judul</title>
$item->title

<atom:summary>Ringkasan</atom:summary>
$item->children($namespaces['atom'])->summary;

Sesekali kita juga harus mengakses atribut. Kode yang diperlukan ditulis semacam ini:


<thumbnail url="???">...</thumbnail>
$item->thumbnail->attributes()->url;

<atom:thumbnail href="???">...</atom:thumbnail>
$item->children($namespaces['atom'])->thumbnail->attributes()->href;

Yak, mungkin sampai disini saja penjelasan dari saya. Sebenarnya proses grabbing mudah saja kalau targetnya mendukung. Kalau ada kode yang tidak diketahui, ada dokumentasi lengkap dan sebagian besar juga dibahas di stackoverflow.

Ada pula metode grabbing lain, yaitu dengan DOM(Document Object Model). Metode ini bisa dilakukan dengan mengekstrak langsung dari halaman berformat HTML yang biasa kita lihat. Kita tidak akan membahasnya sekali waktu ini, mngkin di kesempatan lain, saya akan tuliskan tutorial untuk itu.

Selamat mencoba, happy coding. ;)
Read more