iptables: Allow icmp ping Request

Tags: April 30, 2012 1:33 PM
0 comments

Sometimes when debugging network configuration, ping is one of the tools. But many iptables configuration drop all incoming request so here's how to temporary enable it.

iptables -A INPUT -p icmp -j ACCEPT
After all the debugging, it's easy to delete the rule.
iptables -D INPUT -p icmp -j ACCEPT

Share on Facebook Twitter

Compressing mysqldump output with gzip

Tags: April 29, 2012 2:52 PM
0 comments

Compressing mysqldump ouput is a good practice since your sql dump file could be very big. The good thing is the result of the dump is in plain text, so tools such gzip can siginificanly reduce the size.

# mysqldump -u username -ppassword databasename | gzip > dbname.sql.`date +%Y-%m-%d_%H%M%S`.gz
Put it to cron for daily backup. Cron treat '%' as special character so it needs to be escaped.
0 0 * * * mysqldump -u username -ppassword databasename | gzip > dbname.sql.`date +\%Y-\%m-\%d_\%H\%M\%S`.gz

Share on Facebook Twitter

Install Postfix on Ubuntu Server

Tags: 12:02 PM
0 comments

Installing Postfix Mail Transport Agent (MTA) is very simple on ubuntu/debian.

# apt-get install postfix
Common configuration is internet site.

Listen Address

If the server only used by internal application for sending mail, then there is no need to bind to all interfaces. Just bind to loopback interface 127.0.0.1 as is more safe. The configuration located in /etc/postfix/main.cf.
# service postfix restart
# netstat -ntap | grep :25
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      8176/master

Share on Facebook Twitter

MySQL: Updating Table using UPDATE REPLACE Query

Tags: 9:31 AM
0 comments

This query is quite helpful when you moving from development machine to production where your table content is full of dozen 'http://localhost/' links.

Syntax

UPDATE [table] SET [column] = REPLACE(
  [column],
  [old_value],
  [new_value]
) WHERE [column] LIKE [old_value];

Share on Facebook Twitter

Install Comodo PositiveSSL Certificate on Nginx

Tags: 12:23 AM
0 comments

File used when using PositiveSSL are:

  • AddTrustExternalCARoot.crt
  • PositiveSSLCA2.crt
  • the_domain.crt

Concatenate the certificate in reverse order.

cat the_domain.crt > the_domain.pem
cat PositiveSSLCA2.crt >> the_domain.pem
cat AddTrustExternalCARoot.crt >> the_domain.pem

Share on Facebook Twitter

Nginx Redirect www to non-www

Tags: April 28, 2012 10:35 PM
0 comments

Search engine mengenali www.example.com dan example.com sebagai dua website yang berbeda. Oleh karena itu sebaiknya digunakan salah satu saja, dalam contoh yang akan digunakan adalah example.com. Dimana semua URL yang diawali dengan http://www.example.com/apa/saja/ada.html akan diredirect ke http://example.com/apa/saja/ada.html.

Share on Facebook Twitter

Tuning Konfigurasi Apache pada VPS

Tags: 7:29 PM
0 comments

Jika menjalankan website pada VPS yang memorinya terbatas maka proses tuning/optimasi konfigurasi merupakan keharusan. Setiap konfigurasi memiliki dampak yang berbeda-beda tergantung berbagai macam faktor diantaranya hardware dan versi aplikasi yang dijalankan. Jadi tidak ada garansi satu konfigurasi bisa mengatasi semua masalah. Intinya tetap benchmark.

Konfigurasi ini digunakan ketika apache berjalan dibelakang proxy (nginx). Tugas apache hanya menjalankan dynamic content (PHP). Dan versi apache yang dijalankan adalah versi prefork bukan MPM worker.

Share on Facebook Twitter

Memasang RapidSSL Certificate pada Nginx

Tags: 5:37 PM
0 comments

Setelah menggenerate CSR, langkah berikutnya adalah menggabungkan server certificate dan intermediate certificate. Dua-duanya diperoleh setelah proser approval dari CSR. Berikut langkahnya.

Menggabungkan Certificate

Untuk lebih memudahkan, lokasi ssl certificate biasanya dikumpulkan pada direktori /etc/ssl

Share on Facebook Twitter

Generate 2048 bit key CSR OpenSSL

Tags: 4:40 PM
0 comments

Pihak issuer SSL certificate saat ini umumnya meminta Certificate Signing Request (CSR) 2048 bit karena key dengan 1024 sudah dapat "dicrack" dengan kemampuan mesin komputer terbaru. Selain itu dalam proses pembuatan CSR anda diminta untuk tidak memasukkan alamat email dan challenge password.

Share on Facebook Twitter

Konfigurasi Nginx sebagai Reverse Proxy Apache

Tags: 2:49 PM
0 comments

There is no home like Apache mod_php, itu mungkin yang dikatakan PHP. Performa PHP yang berjalan sebagai Fast-CGI process terkadang masih kalah dengan performa mod_php. Keunggulan utama Nginx adalah memory kecil dan sangat cepat dalam memproses static content. Untuk itu kenapa tidak memakai keunggulan dari keduanya sekaligus, mod_php sebagai PHP handler dan Nginx sebagai static content handler. It makes everyone happy :).

Share on Facebook Twitter

Instalasi Apache PHP MySQL pada Ubuntu Server

Tags: 12:13 PM
0 comments

PHP.net merekomendasikan penggunan apache-mpm-prefork karena ada beberapa extension PHP yang masih belum thread safe.

## dengan menginstall libapache2-mod-php5 maka otomatis paket-paket apache ikut terinstall
# apt-get install libapache2-mod-php5

## install PHP APC untuk opcode caching
# apt-get install php-apc

## install ekstensi untuk mysql
# apt-get install php5-mysql

## install mysql server
# apt-get install mysql-server

Share on Facebook Twitter

Instalasi git Pada Ubuntu Linux

Tags: 11:50 AM
0 comments

Proses instalasi berikut menggunakan official repository dari ubuntu bukan kompilasi dari source.

# apt-get install git-core
Setelah instalasi tambahkan user git (tanpa home) dan batasi shell aksesnya.
# useradd -s /usr/bin/git-shell -M git

Share on Facebook Twitter

Add User to a Group in Linux

Tags: 11:31 AM
0 comments

# adduser  

## i.e. we're adding user 'rio' to group 'admin' so he can use sudo command.
# adduser rio admin

Share on Facebook Twitter

Konfigurasi sshd_config Login Tanpa Password

Tags: 11:12 AM
0 comments

Ubah konfingurasi pada /etc/ssh/sshd_config.

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
UsePAM no
Copy-kan dulu public key sebelum direload.

Share on Facebook Twitter

Mengganti Port SSH pada Ubuntu Linux

Tags: 10:50 AM
0 comments

Nomor port yang dapat digunakan pada linux adalah 1-65535. Dalam contoh digunakan port 22222.

# vim /etc/ssh/sshd_config

[-- SNIP --]
# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22222
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
[-- SNIP --]

## Reload kembali service ssh
# service ssh reload

## lihat daftar process yang listen pada port tertentu
# netstat -ntap
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1994/nginx.conf 
tcp        0      0 0.0.0.0:22222           0.0.0.0:*               LISTEN      2026/sshd       
tcp        0    240 106.187.94.18:22        114.79.61.39:38656      ESTABLISHED 2035/0          
tcp6       0      0 :::22222                :::*                    LISTEN      2026/sshd

Share on Facebook Twitter

Flush (reset) iptables rules

Tags: 10:30 AM
0 comments

Sebaiknya dibuat script untuk melakukan flushing iptables agar dapat dieksekusi dilain waktu.

# vim /root/scripts/iptables-flush.sh
[-- SNIP --]
#!/bin/bash

echo "Flushing iptables..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
[-- SNIP --]

# chmod +x /root/scripts/iptables-flush.sh
# /root/scripts/iptables-flush.sh
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Share on Facebook Twitter

Menghapus Satu Baris Rule pada iptables

Tags: 10:04 AM
1 comments

Salah satu cara yang dapat digunakan untuk menghapus sebuah rule di iptables.

## list terlebih dulu daftar rule beserta nomor barisnya
# iptables -L INPUT -n --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

## hapus rule berdasarkan nomor baris
# iptables -D INPUT 4
# iptables -L -n --line-numbers
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
Referensi:

Share on Facebook Twitter

Setting iptables pada Ubuntu

Tags: 6:05 AM
0 comments

Setting berikut secara default memblok semua paket yang masuk kecuali pada port 22, 80 dan 443.

# cek dulu apakah sudah ada settingan sebelumnya
# iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# settingan dapat dihapus dengan opsi flush

Share on Facebook Twitter

Remove Key from SSH known_hosts File

Tags: April 18, 2012 1:55 PM
0 comments

Are you getting message like shown below while trying to connect using SSH?

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
bb:cc:6d:a8:a9:cb:47:28:ea:1d:90:5a:aa:zz:yy:xx.
Please contact your system administrator.
Add correct host key in /home/astadev/.ssh/known_hosts to get rid of this message.
Offending key in /home/astadev/.ssh/known_hosts:68
RSA host key for 106.x.y.z has changed and you have requested strict checking.
Host key verification failed.

Solution

To getting rid of the message is easy, just issue simple command below. Remember to replace 127.0.0.1 with your server address.
$ ssh-keygen -R 127.0.0.1

Share on Facebook Twitter

Login SSH tanpa Password

Tags: April 2, 2012 7:43 AM
0 comments

Untuk dapat login tanpa menggunakan password maka diperlukan pembuatan private dan public key terlebih dulu. Selanjutnya copy isi public key (default id_rsa.pub) ke server SSH dan letakkan pada /home/user/.ssh/authorized_keys. Pengcopyan dapat dilakukan secara manual atau menggunakan tools seperti ssh-copy-id.

$ ssh-copy-id <user>@<host>
Selanjutnya proses login SSH dapat dilakukan seperti biasa, hanya saja sekarang tidak muncul prompt password.
$ ssh <user>@<host>

# jika menggunakan private key selain /home/user/id_rsa maka dapat digunakan opsi -i
$ ssh -i /lokasi/ke/private_key <user>@<host>

Share on Facebook Twitter

How to Count String Length using Shell

Tags: 7:14 AM
0 comments

Bash Variable: The POSIX Way

$ MYSTRING="Speed of Light"
$ echo ${#MYSTRING}
14

Using wc

$ echo -n "Speed of Light"
14

Using expr

This is not POSIX complaint.

$ expr length "Speed of Light"
14

Share on Facebook Twitter

Membuat SSH Key dengan ssh-keygen

Tags: March 13, 2012 8:41 AM
0 comments

Perintah paling umum yang digunakan untuk membuat SSH Key. Perintah berikut membuat ssh key dengan tipe enkripsi RSA dengan jumlah bit 2048.

## pastikan dulu direktori ~/.ssh ada
$ mkdir -p ~/.ssh && chmod 700 ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
a0:19:e5:f1:f6:b5:fb:67:ae:f0:28:26:26:a0:48:0b user@host
The key's randomart image is:
+--[ RSA 2048]----+
|      o          |
|     o o         |
|    . o o   .    |
|     + o . . .   |
|    o   S . .    |
|E.  .        .   |
|o... .      o    |
|...   . o o  =  o|
|       o o .. +=.|
+-----------------+ 

Secara default perintah ssh-keygen akan menghasilkan private key dengan nama id_ENKRIPSI dan public key id_ENKRIPSI.pub. Pada contoh diatas dihasilkan dua file yaitu id_rsa dan id_rsa.pub. Jika ingin menggunakan nama file yang berbeda maka digunakan opsi -f.

$ ssh-keygen -t rsa -f ~/.ssh/github_rsa

Maka akan muncul dua file pada direktori ~/.ssh yaitu github_rsa (private key) dan github_rsa.pub (public_key).

Share on Facebook Twitter

Cross Domain Request dengan JSONP

Tags: March 12, 2012 1:04 PM
0 comments

Karena alasan keamanan browser membatasi fungsi-fungsi object xmlHttpRequest ketika digunakan pada domain yang berbeda. Salah satu teknik yang dapat digunakan untuk mengatasi keterbasan tersebut adalah dengan JSONP (JSON with Padding). Fitur related post pada website ini pun menggunakan teknik JSONP.

Demo

Berikut ini adalah demo dimana text yang diinputkan pada textbox dibawah ini akan dibalik (reverse) pada sisi server.

Target URL Output
http://playground-astasoft2.rhcloud.com/jsonp/cross-domain-test.php?callback=show_reversed_text&text=foo+bar
show_reversed_text({
  "origtext": "foo bar", 
  "revtext": "rab oof"
});

Share on Facebook Twitter

Membuat Related Post pada Blogger

Tags: 10:31 AM
0 comments

Setelah berjam-jam dipusingkan dengan bagaimana membuat related post pada blogger, akhirnya dapat selesai juga solusinya. Cara mudah untuk membuatnya adalah sebagai berikut: pertama cari baris kode pada template yang terlihat seperti kode berikut.

<p class='post-footer-line post-footer-line-1'>

Sisikan kode baru sehingga tampilan akhir menjadi seperti ini.

<-- BEGIN RELATED POST -->
<b:if cond='data:blog.pageType == "item"'>
    <div id="blogger-related-post" style="margin-bottom:20px;"></div>
    <b:if cond='data:post.labels'>
        <script>
            var blogger_related_post_tags = "<b:loop values='data:post.labels' var='label'><data:label.name/><b:if cond='data:label.isLast != "true"'>,</b:if></b:loop>";
            var blogger_related_link = "http://playground-astasoft2.rhcloud.com/blogger/related-post.php?tags=" + blogger_related_post_tags + '&amp;id=<data:post.id/>&amp;format=htmljsonp&amp;domain=notes.rioastamal.net&amp;max=7';
            
            function update_related_post_data(jsonp) {
                document.getElementById('blogger-related-post').innerHTML = jsonp.data;
            }
            
            var bscript = document.createElement("script");
            bscript.setAttribute("src", blogger_related_link);
            document.getElementsByTagName('head')[0].appendChild(bscript); 
        </script>
    </b:if>
</b:if>
<-- END RELATED POST -->

<p class='post-footer-line post-footer-line-1'>

Selanjutnya yang perlu diganti hanyalah pada baris nomor 7 yaitu bagian domain=notes.rioastamal.net ganti dengan domain=blogspot.anda.sendiri. Contoh hasil related post dapat dilihat pada blog ini.

Share on Facebook Twitter

Install Nginx pada Ubuntu Server

Tags: March 11, 2012 4:36 PM
0 comments

Metode instalasi yang dipakai adalah menggunakan paket deb bukan dari source. Paket deb terbaru disediakan langsung oleh website official nginx. Versi ubuntu yang mendapat dukungan langsung adalah Ubuntu versi 10.04 Lucid Lynx (Per tanggal Maret 2012).

Import signature key dari nginx.org

$ cd /tmp
$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key && rm nginx_signing.key

Tambahkan pada source.list.d

$ sudo vi /etc/apt/sources.list.d/nginx.list

## tambahkan satu baris berikut lalu simpan
deb http://nginx.org/packages/ubuntu/ lucid nginx

$ sudo apt-get update

Share on Facebook Twitter

Mencari String pada File melalui Shell

Tags: 10:45 AM
0 comments

Perintah yang dapat digunakan.

find [DIRECTORY] -exec grep -H -n [STRING] {} \;

Contoh

Contoh berikut akan mencari letak dimana file dari fungsi wp_login berada. Pencarian dilakukan pada direktori distribusi wordpress yang telah diextract.

Share on Facebook Twitter

Internet Connection Sharing pada Ubuntu via Wi-Fi

Tags: 9:40 AM
0 comments

Perangkat Keterangan Interface Alamat IP
Laptop Ubuntu 10.04 sebagai Host/Gateway ppp0 (Internet) DHCP dari ISP
eth0 (LAN) 192.168.1.10
TP-Link TL-WA5110G Access Point LAN Port 192.168.1.254
Android Phone Test Device - DHCP dari Access Point

Langkah-langkah pada Ubuntu

Diasumsikan bahwa kondisi Ubuntu sudah terkoneksi dengan internet jadi tidak perlu dijabarkan disini, yang akan disetting pada sisi ubuntu adalah IP address untuk interface eth0 dan paket forwarding. Hasil perintah dibawah ini bersifat temporer, artinya akan hilang ketika restart.

Share on Facebook Twitter

Melihat Daftar Paket yang Dapat Diupgrade pada Debian/Ubuntu

Tags: March 10, 2012 6:37 PM
0 comments

Perintah ini digunakan untuk melihat daftar paket yang dapat diupgrade pada distro Debian/Ubuntu. Kuncinya adalah pemberian opsi -s yang artinya hanya merupakan proses simulasi.

# apt-get update
# apt-get upgrade -s
Atau full OS (distribution) upgrade.
# apt-get dist-upgrade -s

Share on Facebook Twitter

Membuat Fungsi Terbilang pada PHP

Tags: 3:55 PM
0 comments

Code ini self explanatory jadi mudah untuk di-porting ke bahasa pemrograman lain.

<?php
/**
 * Fungsi untuk menerjemahkan suatu angka dalam bentuk bilangan. contoh,
 *
 * <code>
 * terbilang(5); // output 'Lima'
 * terbilang(41); // output 'Empat puluh satu'
 * terbilang(1001); // output 'Seribu satu'
 * </code>
 *
 * @author Rio Astamal <me@rioastamal.net>
 *
 * @param int $angka - Angka yang akan diterjemahkan
 * @return string
 */
function terbilang($angka) {
    // pastikan kita hanya berususan dengan tipe data numeric
    $angka = (float)$angka;
    
    // array bilangan 
    // sepuluh dan sebelas merupakan special karena awalan 'se'
    $bilangan = array(
            '',
            'satu',
            'dua',
            'tiga',
            'empat',
            'lima',
            'enam',
            'tujuh',
            'delapan',
            'sembilan',
            'sepuluh',
            'sebelas'
    );
    
    // pencocokan dimulai dari satuan angka terkecil
    if ($angka < 12) {
        // mapping angka ke index array $bilangan
        return $bilangan[$angka];
    } else if ($angka < 20) {
        // bilangan 'belasan'
        // misal 18 maka 18 - 10 = 8
        return $bilangan[$angka - 10] . ' belas';
    } else if ($angka < 100) {
        // bilangan 'puluhan'
        // misal 27 maka 27 / 10 = 2.7 (integer => 2) 'dua'
        // untuk mendapatkan sisa bagi gunakan modulus
        // 27 mod 10 = 7 'tujuh'
        $hasil_bagi = (int)($angka / 10);
        $hasil_mod = $angka % 10;
        return trim(sprintf('%s puluh %s', $bilangan[$hasil_bagi], $bilangan[$hasil_mod]));
    } else if ($angka < 200) {
        // bilangan 'seratusan' (itulah indonesia knp tidak satu ratus saja? :))
        // misal 151 maka 151 = 100 = 51 (hasil berupa 'puluhan')
        // daripada menulis ulang rutin kode puluhan maka gunakan
        // saja fungsi rekursif dengan memanggil fungsi terbilang(51)
        return sprintf('seratus %s', terbilang($angka - 100));
    } else if ($angka < 1000) {
        // bilangan 'ratusan'
        // misal 467 maka 467 / 100 = 4,67 (integer => 4) 'empat'
        // sisanya 467 mod 100 = 67 (berupa puluhan jadi gunakan rekursif terbilang(67))
        $hasil_bagi = (int)($angka / 100);
        $hasil_mod = $angka % 100;
        return trim(sprintf('%s ratus %s', $bilangan[$hasil_bagi], terbilang($hasil_mod)));
    } else if ($angka < 2000) {
        // bilangan 'seribuan'
        // misal 1250 maka 1250 - 1000 = 250 (ratusan)
        // gunakan rekursif terbilang(250)
        return trim(sprintf('seribu %s', terbilang($angka - 1000)));
    } else if ($angka < 1000000) {
        // bilangan 'ribuan' (sampai ratusan ribu
        $hasil_bagi = (int)($angka / 1000); // karena hasilnya bisa ratusan jadi langsung digunakan rekursif
        $hasil_mod = $angka % 1000;
        return sprintf('%s ribu %s', terbilang($hasil_bagi), terbilang($hasil_mod));
    } else if ($angka < 1000000000) {
        // bilangan 'jutaan' (sampai ratusan juta)
        // 'satu puluh' => SALAH
        // 'satu ratus' => SALAH
        // 'satu juta' => BENAR 
        // @#$%^ WT*
        
        // hasil bagi bisa satuan, belasan, ratusan jadi langsung kita gunakan rekursif
        $hasil_bagi = (int)($angka / 1000000);
        $hasil_mod = $angka % 1000000;
        return trim(sprintf('%s juta %s', terbilang($hasil_bagi), terbilang($hasil_mod)));
    } else if ($angka < 1000000000000) {
        // bilangan 'milyaran'
        $hasil_bagi = (int)($angka / 1000000000);
        // karena batas maksimum integer untuk 32bit sistem adalah 2147483647
        // maka kita gunakan fmod agar dapat menghandle angka yang lebih besar
        $hasil_mod = fmod($angka, 1000000000);
        return trim(sprintf('%s milyar %s', terbilang($hasil_bagi), terbilang($hasil_mod)));
    } else if ($angka < 1000000000000000) {
        // bilangan 'triliun'
        $hasil_bagi = $angka / 1000000000000;
        $hasil_mod = fmod($angka, 1000000000000);
        return trim(sprintf('%s triliun %s', terbilang($hasil_bagi), terbilang($hasil_mod)));
    } else {
        return 'Wow...';
    }
}

Share on Facebook Twitter

Membuat Fungsi Random String pada PHP

Tags: 12:59 PM
0 comments

<?php
/**
 * Fungsi untuk mendapatkan random string
 *
 * @author Rio Astamal <me@rioastamal.net>
 * @since Version 1.0
 *
 * @param int $length Panjang string yang akan digenerate
 * @return string
 */
function mr_random_string($length=8) {
 // kumpulan random string yang akan diambil
 $string = '=-0987654321!@#%^&*()_+][poiuytrewqasdfghjkl;/.,mnbvcxzQWERTYUIOP{}|:LKJHGFDSAZXCVBNM<>?';
 // digunakan untuk fungsi mt_rand
 $str_len = strlen($string) - 1; // minus 1 karena urutan dimulai dari 0
 
 // variabel penyimpan output
 $out = '';
 // loop sebanyak parameter yang diinputkan (default => 8)
 for ($i=0; $i<$length; $i++) {
  // posisi acak single string yang akan diambil
  // dari 0 sampai banyaknya string
  $pos = mt_rand(0, $str_len);
  // simpan pada output
  $out .= $string[$pos]; // cukup ambil satu string
 }
 
 // kembalkan output
 return $out;
}

Code diambil dari paket string helper pada Miras Framework.

Share on Facebook Twitter

Membuat Fungsi Padding Zero pada PHP

Tags: 10:38 AM
0 comments

<?php
/**
 * Fungsi untuk menambahkan NOL didepan angka. Contoh.
 *
 * <code>
 * pad_zero(4);            // output 000004
 * pad_zero(123);        // output 000123
 * pad_zero(123, 4);    // output 0123
 * pad_zero(123, 4, FALSE);    // output 1230
 * </code>
 
 * @author Rio Astamal <me@rioastamal.net>
 *
 * @param int $number - Angka yang akan ditambahkan NOL
 * @param int $length - Jumlah digit yang ingin ditampilkan
 * @param string $in_front - Posisi NOL apakah didepan (TRUE) atau dibelakang (FALSE)
 * 
 * @return string
 */
function pad_zero($number, $length=6, $in_front=TRUE) {
    // ubah ke string agar dapat dihitung jumlah karakternya
    $number = (string)$number;
    // jumlah loop yang dilakukan adalah panjang digit - jumlah karakter
    // jadi jika ingin digit 6 dan angka yang disupply adalah 3
    // maka loop = 6 - 1 => 5 buah NOL
    $loop = $length - strlen($number);
    
    // variabel penampung hasil
    $result = '';
    for ($i=0; $i<$loop; $i++) {
        // tambahkan nol
        $result .= '0';
    }
    
    // gabungkan jumlah NOL dengan angka
    if ($in_front === TRUE) {
        $result = $result . $number;
    } else {
        // NOL dibelakang
        $result = $number . $result;
    }
    
    return $result;
}

Share on Facebook Twitter