Currently Browsing
Posts Tagged ‘ PHP ’
First MeetUp (Hello Mongo)
- 1 February //
- Posted in Internet, PHP, Programming, Technology, Web //
- Tags : idmug, MongoDB, PHP, talks
- No Comment
Alasan Menggunakan PHP Framework
- 6 December //
- Posted in Opini, PHP, Programming, Technology //
- Tags : Framework, Opini, PHP
- 2 Comments
Baru-baru ini ada kesempatan diskusi dengan orang soal penggunaan php framework dengan akademisi dengan latar belakang pemrograman java, mengapa perlu menggunakan php framework, apa gunanya php framework. Diskusinya lumayan menggoyahkan iman ![]()
Posting kali ini adalah jawaban dan kesimpulan saya soal ini, yang kebetulan belum bisa saya utarakan waktu diskusi tempo hari. Kalau mas dan mbak semua ditanya kenapa menggunakan framework/tidak menggunakan framework, apa jawabannya? Pasti jawabannya beragam. Berikut jawaban populer yang saya dapatkan dari survey kecil2an via Y!m dengan temen2.
Kenapa pake framework?
- “Coding lebih cepat, biasanya pake framework jadi nulis good code”
- “Framework X base penggunanya banyak, community besar”
- “Kalau ukuran project/aplikasi besar lebih mudah dengan framework”
- “Biar gak reinvent the wheel, reuse code”
- “dan lain-lain, dan sebagainya, dan teman-temannya… “
Kenapa tidak menggunakan framework?
- “Framework gak transparan, banyak activity yang di hidden”
- “Framework gak fleksibel, terus konvensinya beda-beda”
- “Ga punya full control atas framework, mending bikin sendiri”
- “dan lain-lain, dan sebagainya, dan teman-temannya… “
Pro dan kontra soal ini memang gak ada habisnya. IMHO, poin2 diatas gak sepenuhnya bener. Coding cepat itu relatif dan pake framework juga belum tentu kita bisa nulis good code. Pengguna framework X banyak juga bukan alasan tepat kita menggunakan framework, tapi ini bisa jadi alasan pertimbangan memilih framework. Ukuran aplikasi yang akan di develop juga bukan tolak ukur penggunaan framework, besar kecil aplikasi bisa di develop menggunakan/tidak menggunakan f/w. Reuse code ini juga relatif, yang tidak pake framework juga pasti punya koleksi class/function bukan?
Kalo dibilang framework itu banyak activity yang di hidden, saya gak setuju, tinggal di trace saja, corenya ada kok, gak sreg ya tinggal modifikasi aja. Konvensi tiap framework beda-beda itu jelas, gak hanya di PHP kan ya? Di Java pun begitu, Spring misalnya pasti beda dengan f/w lainnya di java. Kalo kata mas @neofreko sih bikin apa2 sendiri itu buat orang masih muda aja, kalo yang dewasa ini harusnya bijaksana, lagipula development time kan juga jadi pertimbangan besar.
Ini poin-poin yang jadi kesimpulan saya mengapa menggunakan framework :
- Mudah dimaintain dan konsisten
- Development time lebih cepat dengan menggunakan framework
- Stable and Less Error
Alasan dan penjelasannya kira-kira gini :
- Mudah dimaintain dan konsisten, ini karena framework sudah ada konvensinya. Aspek ini menurut saya penting jika bekerja dengan tim yang terdiri dari beberapa orang atau anggota tim yang berganti-ganti (as they always do). Dengan adanya konvensi ini debugging lebih mudah dilakukan, alurnya sudah jelas. Ya memang konvensi tiap framework beda-beda, tapi itu bukan masalah menurut saya.
- Dengan menggunakan framework, development time juga akan lebih cepat. Framework simplify things. Dengan menggunakan framework kita memangkas waktu mengerjakan library basic yang mutlak diperlukan, misal database connectivity, security, session management. Untuk developer yang baru masuk tim pun tidak akan terlalu banyak makan waktu untuk ikut develop langsung dengan membaca dokumentasi dan contoh penggunaan f/w (apalagi f/w yang digunakan termasuk populer).
- Framework jelas stable dan less error. Apa jaminannya? Cek di websitenya, tiap framework ada testnya. Kalo bikin sendiri error prone alias rawan error.
Kalo kata mas @neofreko lagi sih. “Siapa yang mau bikin ACL (Access Control List) sendiri? cuman orang gila yang mau bikin sendiri” ![]()
Tapi semuanya balik lagi soal kebijakan dan/atau kasus/aplikasi yang akan dikerjakan. Yaah itu pendapat saya soal alasan penggunaan framework untuk development, boleh setuju boleh juga gak setuju. Silahkan komentar yang setuju dan gak setuju di form komentar dibawah ini… ![]()
Selamat makan siang semuanya ![]()
CodeIgniter Session Problem
- 12 November //
- Posted in Info, PHP, Programming, Tutorial //
- Tags : code, CodeIgniter, PHP, Programming, Tutorial
- 4 Comments
“Why my user session keep expiring?” “Why CodeIgniter session expires when the page refreshed?“
Bagi yang sudah sering menggunakan CI biasanya pernah mengalami masalah session problem ini. Usut punya usut dan cari punya cari, ternyata banyak juga yang mengalami masalah serupa. Di forum CodeIgniter pun ada beberapa thread yang posting masalah ini. Kenapa sessionnya expired terus? Atau malah tidak bekerja dengan semestinya di Internet Explorer versi lawas sedangkan di browser lain tidak masalah.
Banyak yang bilang session class si CI ini unreliable. Well, yes it is. I couldn’t agree more with it. CodeIgniter membuat session class-nya ini tidak menggunakan native session-nya PHP, tetapi CI generate sendiri session data mereka. Alasannya agar session lebih fleksibel bagi developer.
Untuk masalah diatas, ini salah satu workaround-nya. Menggunakan external library yang dibikin oleh mas Dariusz Debowczyk yang cerdas nan brilian. Skrip session class-nya dapat diunduh di tautan berikut (atau di akhir post ini) :
http://codeigniter.com/wiki/Dariusz_Debowczyk%27s_Session_Class
Cara menggunakannya cukup simpel, copy dan paste skrip lalu save di direktori “libraries” dengan nama Session.php. Kemudian tinggal panggil library seperti biasa, $this->load->library(“session”); atau didefinisikan di file config/autoload.php di option library-nya. Problem solved! ![]()
Menurut posting di thread forum CI, library ini berjalan pada CodeIgniter versi 1 dan 2. Saya sudah coba gunakan dan jalan baik-baik saja di versi 2. Di bawah ini skrip session class mas Darius saya kutip untuk mempermudah copy dan pastenya.
I hope this post helps you. Have a nice weekend </span>
<pre><!--?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /?--> makes dw cs4 happy
/**
* Session class using native PHP session features and hardened against session fixation.
*
* @package CodeIgniter
* @subpackage Libraries
* @category Sessions
* @author Dariusz Debowczyk, Matthew Toledo
* @link http://www.philsbury.co.uk/index.php/blog/code-igniter-sessions/
*/
class CI_Session {
var $flashdata_key = 'flash'; // prefix for "flash" variables (eg. flash:new:message)
function CI_Session()
{
$this->object =& get_instance();
log_message('debug', "Native_session Class Initialized");
$this->_sess_run();
}
/**
* Regenerates session id
*/
function regenerate_id()
{
// copy old session data, including its id
$old_session_id = session_id();
$old_session_data = $_SESSION;
// regenerate session id and store it
session_regenerate_id();
$new_session_id = session_id();
// switch to the old session and destroy its storage
session_id($old_session_id);
session_destroy();
// switch back to the new session id and send the cookie
session_id($new_session_id);
session_start();
// restore the old session data into the new session
$_SESSION = $old_session_data;
// update the session creation time
$_SESSION['regenerated'] = time();
// session_write_close() patch based on this thread
// http://www.codeigniter.com/forums/viewthread/1624/
// there is a question mark ?? as to side affects
// end the current session and store session data.
session_write_close();
}
/**
* Destroys the session and erases session storage
*/
function destroy()
{
unset($_SESSION);
if ( isset( $_COOKIE[session_name()] ) )
{
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
}
/**
* Alias for destroy(), makes 1.7.2 happy.
*/
function sess_destroy()
{
$this->destroy();
}
/**
* Reads given session attribute value
*/
function userdata($item)
{
if($item == 'session_id'){ //added for backward-compatibility
return session_id();
}else{
return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
}
}
/**
* Sets session attributes to the given values
*/
function set_userdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}
if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$_SESSION[$key] = $val;
}
}
}
/**
* Erases given session attributes
*/
function unset_userdata($newdata = array())
{
if (is_string($newdata))
{
$newdata = array($newdata => '');
}
if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
unset($_SESSION[$key]);
}
}
}
/**
* Starts up the session system for current request
*/
function _sess_run()
{
session_start();
$session_id_ttl = $this->object->config->item('sess_expiration');
if (is_numeric($session_id_ttl))
{
if ($session_id_ttl > 0)
{
$this->session_id_ttl = $this->object->config->item('sess_expiration');
}
else
{
$this->session_id_ttl = (60*60*24*365*2);
}
}
// check if session id needs regeneration
if ( $this->_session_id_expired() )
{
// regenerate session id (session data stays the
// same, but old session storage is destroyed)
$this->regenerate_id();
}
// delete old flashdata (from last request)
$this->_flashdata_sweep();
// mark all new flashdata as old (data will be deleted before next request)
$this->_flashdata_mark();
}
/**
* Checks if session has expired
*/
function _session_id_expired()
{
if ( !isset( $_SESSION['regenerated'] ) )
{
$_SESSION['regenerated'] = time();
return false;
}
$expiry_time = time() - $this->session_id_ttl;
if ( $_SESSION['regenerated'] $newval);
}
if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$flashdata_key = $this->flashdata_key.':new:'.$key;
$this->set_userdata($flashdata_key, $val);
}
}
}
/**
* Keeps existing "flash" data available to next request.
*/
function keep_flashdata($key)
{
$old_flashdata_key = $this->flashdata_key.'<img src='http://hadiariawan.web.id/smilies/yahoo_ooooh.gif' alt=':o' class='wp-smiley' width='18' height='18' title=':o' />ld:'.$key;
$value = $this->userdata($old_flashdata_key);
$new_flashdata_key = $this->flashdata_key.':new:'.$key;
$this->set_userdata($new_flashdata_key, $value);
}
/**
* Returns "flash" data for the given key.
*/
function flashdata($key)
{
$flashdata_key = $this->flashdata_key.'<img src='http://hadiariawan.web.id/smilies/yahoo_ooooh.gif' alt=':o' class='wp-smiley' width='18' height='18' title=':o' />ld:'.$key;
return $this->userdata($flashdata_key);
}
/**
* PRIVATE: Internal method - marks "flash" session attributes as 'old'
*/
function _flashdata_mark()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode(':new:', $name);
if (is_array($parts) && count($parts) == 2)
{
$new_name = $this->flashdata_key.'<img src='http://hadiariawan.web.id/smilies/yahoo_ooooh.gif' alt=':o' class='wp-smiley' width='18' height='18' title=':o' />ld:'.$parts[1];
$this->set_userdata($new_name, $value);
$this->unset_userdata($name);
}
}
}
/**
* PRIVATE: Internal method - removes "flash" session marked as 'old'
*/
function _flashdata_sweep()
{
foreach ($_SESSION as $name => $value)
{
$parts = explode('<img src='http://hadiariawan.web.id/smilies/yahoo_ooooh.gif' alt=':o' class='wp-smiley' width='18' height='18' title=':o' />ld:', $name);
if (is_array($parts) && count($parts) == 2 && $parts[0] == $this->flashdata_key)
{
$this->unset_userdata($name);
}
}
}
}
![]()
PHP: Mobile Device Detection Script
- 11 June //
- Posted in Internet, PHP, Programming, Web //
- Tags : code, mobile, PHP
- No Comment
Kalo kita punya website dengan dua versi, versi desktop dan versi mobilenya, pasti kita mau mobile user alias user yang akses pake handphone di-redirect ke website versi mobile. Gmana caranya? Gini kira-kira caranya.
if(mobile_detect() == true){
// redirect http://m.websitekita.com
}
fungsi mobile_detect() yang ada diatas bisa diambil dibawah ini. please use, copy, edit this simple script as you please.
function mobile_detect()
{
$is_mobile = false;
$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
if ($iphone || $android || $palmpre || $ipod || $berry == true)
{
$is_mobile = true;
}else{
$is_mobile = false;
}
return $is_mobile;
}
PHP: RSS Yahoo Weather Parser
Yahoo! Weather menyediakan informasi cuaca hampir semua lokasi di dunia. Informasi cuaca ini bisa diambil melalui RSS yang disediakan oleh Yahoo! Contohnya, informasi cuaca di kota Jakarta, bisa diakses di URL berikut :
http://weather.yahooapis.com/forecastrss?p=IDXX0022&u=c
Gmana cara ngambil datanya? untuk pengguna bahasa pemrograman PHP ini dia contoh kodenya.
function yahooWeatherParser($source) {
//$source = "http://weather.yahooapis.com/forecastrss?p=IDXX0022&u=c";
$strXml = @file_get_contents($source);
if($strXml == false) return false;
$objRss = simplexml_load_string($strXml);
$objWeather = new SimpleXMLElement($strXml);
$weather['condition'] = $objWeather->xpath("//yweather:condition");
$weather['location'] = $objWeather->xpath("//yweather:location");
$weather['units'] = $objWeather->xpath("//yweather:units");
$weather['wind'] = $objWeather->xpath("//yweather:wind");
$weather['atmosphere'] = $objWeather->xpath("//yweather:atmosphere");
$weather['astronomy'] = $objWeather->xpath("//yweather:astronomy");
$weather['forecast'] = $objWeather->xpath("//yweather:forecast");
$weather['description'] = $objRss->channel->item->description;
return $weather;
}
Gimana cara pakenya? gini ceritanya…
print_r(yahooWeatherParser('http://weather.yahooapis.com/forecastrss?p=IDXX0022&u=c'));
Sekilas PHP dan MongoDB
- 17 March //
- Posted in Download, PHP, Programming, Technology, Tutorial, Windows //
- Tags : Database, MongoDB, NoSQL, PHP, Tutorial
- No Comment
Posting kali ini sekedar sharing percobaan menggunakan PHP dengan MongoDB. Apa itu MongoDB? MongoDB adalah document-based database server. MongoDB ini open source dibangun dengan bahasa pemrograman c++. Kata wikipedia, MongoDB ini scalable, high-performance, schema-free, web-scale. Isi dari MongoDB ini adalah koleksi dari dokumen – dokumen JSON-like. Kira – kira isinya begini…
{
"username" : "bob",
"address" : {
"street" : "123 Main Street",
"city" : "Springfield",
"state" : "NY"
}
}
Di bawah ini ada slide presentasi yang sempat dibuat dari hasil coba – coba PHP dan MongoDB. Apa? Kenapa? dan Bagaimananya MongoDB silahkan browsing – browsing sendiri ya.. ![]()
Note :
Articles to read related to MongoDB and PHP.
- MongoDB: 5 Things Every PHP Developer Should Know About MongoDB
- Building Apps With MongoDB
- Hilarious Video: Relational Database vs NoSQL Fanbois
- NoSQL vs. RDBMS: Let the flames begin!
- http://www.mongodb.org/display/DOCS/Introduction
Installing Zend Optimizer on XAMPP
- 27 September //
- Posted in Internet, PHP, Programming, Technology, Tutorial, Web, Windows //
- Tags : PHP, Tutorial, XAMPP, Zend, Zend Optimizer
- No Comment
Secara default instalasi XAMPP di Windows tidak menyertakan Zend Optimizer, tapi pada umumnya peyedia hosting sudah terinstall Zend Optimizer. Berikut ini langkah – langkah instalasi Zend Optimizer untuk XAMPP di Windows. Versi XAMPP yang digunakan saat post ini ditulis adalah XAMPP 1.7.1.
Direktori instalasi XAMPP yang digunakan ada di D: ( D:\xampp\ )
1. Download Zend Optimizer di website zend.com.
Zend Optimizer bisa di download di http://www.zend.com/en/products/guard/downloads. Tersedia versi MacOS, Linux dan Windows. Download Zend Optimizer for Windows (saat post ini ditulis versi Zend Optimizer 3.3.3)
2. Execute ZendOptimizer-3.3.3-Windows-i386.exe
Pastikan apache/web server dalam keadaan tidak aktif sebelum mulai proses instalasi. Pilih web server yang digunakan, untuk XAMPP 1.7.1 adalah Apache 2.x.x.
Saat proses instalasi ini berjalan, anda akan diberikan 3 kali pertanyaan direktori.
- Lokasi instalasi Zend Optimizer (C:\Program Files\…..)
- secara default installer akan menawarkan di C:\Program Files\… Zend Optimizer
- Lokasi php.ini
- ubah lokasinya sesuai dengan instalasi xampp, dalam kasus ini lokasi xampp yang digunakan ada di direktori D:\ maka lokasinya adalah D:\xampp\php\
- Lokasi apache
- ubah lokasinya sesuai dengan instalasi xampp, dalam kasus ini lokasi xampp yang digunakan ada di direktori D:\ maka lokasinya adalah D:\xampp\apache\
3. Cek phpinfo()
Sebenarnya proses instalasi sudah selesai, Zend Optimizer sudah terinstall di XAMPP. Periksa phpinfo untuk memastikan bahwa Zend Optimizer telah terinstall dengan baik dan benar. Jika sudah terinstall maka akan ada bagian seperti gambar di bawah ini.

Zend Optimizer (phpinfo)
Setelah selesai instalasi, pastikan option Zend Loader : enabled. Jika option Zend Loader masih disabled, ubahlah setting di file php.ini. Cari dan ubah option zend_optimizer.enable_loader dari 0 ke 1. Contoh lihat gambar di bawah ini.

Zend Optimizer (php.ini)
Lalu test dengan menjalankan aplikasi yang membutuhkan Zend Optimizer. That’s it! It’s Done! ![]()
Note:
Sorry, tidak sempat capture pada saat proses instalasi.
Custom Format (Guid) PHP Unique ID
- 14 August //
- Posted in c#, PHP, Programming //
- Tags : c#, code, guid, PHP, unique id
- 2 Comments
Pernah lihat “0afd386c-3422-4ceb-b620-fdda219205db” ?? biasanya orang – orang menamakan rangkaian string dengan format itu dengan Guid. Jangan tanya artinya Guid apa, karena saya juga gak tau ![]()
Oke.. gak usah pakek teori teori ya.. langsung studi kasus aja.. hehehe. Begini contoh kasusnya :
Permasalahan :
Si Budi membangun dua buah sistem (mungkin karena budi tidak jadi bermain bola
). Sistem yang pertama adalah sebuah website dibangun dengan menggunakan .NET, c#. Sistem yang kedua juga website versi mobile untuk pengguna mobile, dibangun dengan PHP. Salah satu field di salah satu tabel berisikan Guid. Tuliskan skrip PHP yang outputnya adalah Guid dengan format yang mirip dengan format ouput library Guid .NET.
Solusi :
Beginilah jawaban si Budi…
c#
String theNuGuid = Guid.NewGuid().ToString();
php
// Generate Guid
function NewGuid() {
$s = strtoupper(md5(uniqid(rand(),true)));
$guidText =
substr($s,0,8) . '-' .
substr($s,8,4) . '-' .
substr($s,12,4). '-' .
substr($s,16,4). '-' .
substr($s,20);
return $guidText;
}
// End Generate Guid
Si Budi sangat jenius sekali… jawabannya benar! ![]()
Have a nice weekend everybody… cihui! hari senen libur yak…
Dirgahayu Republik Indonesia ke-64… MERDEKA!!!
Note :
Si Budi nyontek dari sini :

