Monday, August 8, 2011

Array Count Group dan Multidimension Array Sort pada PHP

Misalkan kita memiliki array sebagai berikut, kemudian ingin di group dan kemudian di sort seperti command di mysql.
Array
(
    [0] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 31
        )

    [1] => Array
        (
            [countryid] => US
            [countryname] => United States
            [totalaccess] => 23
        )

    [2] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 5
        )

    [3] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 2
        )

    [4] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 2
        )

    [5] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 1
        )

)
di group berdasarkan countryid dan di count totalaccess nya, sehingga menjadi
Array
(
    [ID] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 41
        )

    [US] => Array
        (
            [countryid] => US
            [countryname] => United States
            [totalaccess] => 23
        )

)
group menggunakan fungsi sebagai berikut :
function groupArray($result, $groupkey, $countkey)
{
	$finalresult = array();
	foreach($result as $res) {
		$key = $res[$groupkey];

		if(!isset($finalresult[$key])){
			$finalresult[$key] = $res;
		} else {
			$finalresult[$key][$countkey] = $finalresult[$key][$countkey] + $res[$countkey];
		}
	}
	return $finalresult;
}
kemudian di sort berdasarkan totalaccess
Array
(
    [0] => Array
        (
            [countryid] => US
            [countryname] => United States
            [totalaccess] => 23
        )

    [1] => Array
        (
            [countryid] => ID
            [countryname] => Indonesia
            [totalaccess] => 41
        )

)
sort menggunakan fungsi sebagai berikut :
function sortArray($a, $sortkey, $mode = "ASC")
{
	foreach($a as $k=>$v) {
		$b[$k] = strtolower($v[$sortkey]);
	}

	if($mode == "ASC") asort($b);
	else arsort($b);

	foreach($b as $key=>$val) {
		$c[] = $a[$key];
	}
	return $c;
}

Sunday, August 7, 2011

Mysql function for URL record

Saya beberapa hari lalu membuat sendiri kembaran site tracking seperti google analytic untuk website pribadi. Sehingga website saya memiliki 2 jenis tracking, yaitu inhouse tracking dan google analytic sendiri. Tentu tidak bisa se kompleks google analytic dalam perhitungan analisis tracking nya.

Tapi terdapat beberapa perhitungan yang kostum yang tidak dapat dilakukan oleh google analytic. Seperti penggunaan bahasa (multi language site) dominan pada website.

Data dari tracking website tersebut tentu saja di simpan pada database. Dan database yang saya gunakan adalah MySql yang sudah disediakan oleh hosting.

Terdapat beberapa fungsi MySql yang sangat membantu dalam melakukan agregasi perhitungan tracking ini. Berikut adalah fungsi yang saya gunakan :



Mendapatkan nama Server dari record pada MySql :

SELECT SUBSTRING_INDEX(url_record, '/', 3) FROM NAMA_TABLE

dari record :

http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html

mendapatkan hasil :

http://agungbayuiswara.blogspot.com

Mendapatkan nama domain dari record pada MySql :

SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(url_record, '/', 3), '/', -1) FROM NAMA_TABLE

dari record :

http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html

mendapatkan hasil :

agungbayuiswara.blogspot.com

Mendapatkan URI dari record pada MySql :

SELECT SUBSTRING( referrer, LOCATE( '/', referrer, 5 ) + 1 ) FROM tracker

dari record :

http://agungbayuiswara.blogspot.com/2011/08/mencegah-akses-directory-pada-apache.html

mendapatkan hasil :

/2011/08/mencegah-akses-directory-pada-apache.html

Mencegah akses directory pada Apache

Terkadang developer (admin) tidak menutup akses user untuk melihat list dari suatu directory pada suatu webserver. Alhasil setiap orang dapat melihat isi folder dari website tersebut dan mungkin dapat melakukan hal2 yang berbahaya bagi site.

Oleh karena itu perlu bagi site admin untuk mencegah user melihat listing dari directory. Cara nya simple sekali. Hanya dengan menambahkan Options -Indexes pada .htaccess root folder dari website. Maka semua akses untuk listing directory akan dihilangkan.

Tapi jika ada folder yang diinginkan dapat di listing maka tinggal menambahkan Options +Indexes pada file .htaccess didalam folder tersebut.