Belajar PHP: Membuat Aplikasi Daemons Sederhana

Bagi anda yang membutuhkan solusi aplikasi yang melakukan checking terus menerus atau melakukan aksi tertentu secara periodik, mungkin anda akan menggunakan solusi penggunaan Cronjob (jika di server Linux) dan Task Schedulers (jika di server Windows). Namun dua jalan tersebut sangat tergantung pada pewaktuan server dan butuh level akses yang tinggi serta tidak semua hosting mendukungnya. Nah, sebenarnya ada satu jalan lagi yang bisa ditempuh untuk memecahkan masalah diatas, yaitu menggunakan Daemon. Daemon adalah program yang berjalan dibelakang layar (running in backgrounds). Kebanyakan daemon diberinama dengan akhiran ‘d’, contoh: sshd, mysqld, syslogd dan lain-lain.

Membuat Daemon PHP

Daemon sederhana dengan PHP bisa kita buat dengan metoda perulangan WHILE. Contohnya:
[sourcecode language=”php”]
<?php

$no = 1;
while( true )
{
echo $no."\n";
sleep( 3 );
$no++;
}
?>
[/sourcecode]

Skrip diatas akan berjalan selama nilai true ada, dan akan menulis variabel nomor kemudian berhenti sejenak 3 detik untuk melanjutkan ke loop berikutnya.

Berikut adalah contoh nyata implementasi daemon pada plugin WP-SMSGateway yang saya kembangkan. Daemon ini akan bekerja mengecek secara periodik tabel inbox dari keyword-keyword yang dimasukkan.

[sourcecode language=”php”]
<?php

define( ‘ABSPATH’, dirname(dirname(dirname(dirname(dirname(__FILE__))))).’/’ );
include ABSPATH.’wp-load.php’;

$wpsmsgateway = new WPSMSGateway();

/**
* Method for displaying the help and default variables.
**/
function displayUsage(){
global $log;

echo "\n";
echo "\n";
echo "WP-SMSGateway Plugin Daemons (c) 2012 by Luthfi Emka.\n";
echo "\n";
echo "Daemons for Checking SMS Keywords, parse and saved the results.\n";
echo "This is a part of WP-SMSGateway plugins by Luthfi Emka.\n";
echo "\n";
echo "Usage:\n";
echo "\tdaemons.php [options]\n";
echo "\n";
echo "\toptions:\n";
echo "\t\t–help display this help message\n";
echo "\t\t–keyword=<keyword> keyword to find\n";
echo "\n";
}//end displayUsage()

//configure command line arguments
if($argc > 0){
foreach($argv as $arg){
$args = explode(‘=’,$arg);
switch($args[0]){
case ‘–help’:
return displayUsage();
case ‘–keyword’:
$keyword = $args[1];
break;

case ‘–saved-only’:
$saved = TRUE;
break;
}//end switch
}//end foreach
}//end if

$no = 1;
while(TRUE){
//$brot = file_get_contents( $log );
//echo ‘ ‘. base64_encode( $brot ) .’ ‘;

if(!empty($keyword)){
$results = $wpsmsgateway->ceksms_from_keyword( ‘&keyword=SALAM&limit=20′ );
foreach($results as $res){
echo $res->TextDecoded."\n";
}
}
echo $no.’ ‘;
sleep(3);
$no++;
}
?>
[/sourcecode]

Daemon diatas dilengkapi dengan options, –help untuk menampilkan bantuan dan –keyword. Untuk menjalankannya di Windows
C:\xampp\php\php.exe C:\xampp\htdocs\daemons.php --keyword=TEST

atau di Linux

php /opt/smsgateway/daemons/daemon.php