Windows Service Dengan PHP
Kemaren saya nyari-nyari gimana bisa ngemulasiin Cronnya linux untuk diwindows. Solusi paling tepatnya tentu pake service-nya windows, soalnya kalo pake service bisa start program walaupun usernya belum login, trus kalo usernya logout programnya tetep jalan.
Hasil nyari-nyari diinternet akhirnya diputusin buat sendiri aja
(abis enggak ada yang muasin sih) Apalagi nemu tehnik untuk membuat windows service dengan menggunakan PHP dari blognya Wez Furlong. Tehnik ini sebenernya udah cukup lama ada tapi referensi tentang penggunaannya masih sedikit banget, apalagi dalam bahasa indonesia. Karena menurut saya tehnik pembuatan windows service menggunakan PHP cukup penting, makanya saya ngebahas disini.
Program windows service dengan PHP ngegunain model CLInya PHP (maksudnya PHP dirun langsung dari command prompt, bukan dari web server kaya Apache). Dalam implementasi, saya ngegunain PHP yang dipaket oleh WAMP 5 (sudah pake Apache 2 + PHP 5). Pertama, buka php.ini yang ada di :
c:\wamp\Apache2\bin dan trus tambahin baris ini di bagian extention :
extension=php_win32service.dlltrus pastiin ada file :
c:\wamp\php\ext\php_win32service.dllkemudian buat file cron.php di folder c:\wamp\www (posisi terserah sih, beda command jalaninnya aja nanti). isinya :
< ?php
if ($argv[1] == 'install')
{
win32_create_service(array(
'service' => 'purefectCron',
'display' => 'purefectCron',
'path' => 'c:wampphpphp-win.exe',
'params' => '-c c:wampApache2bin c:wampwwwcron.php run'));
}
else if ($argv[1] == 'uninstall')
{
win32_delete_service('purefectCron');
}
else if ($argv[1] == 'run')
{
chdir('c:wampwww');
win32_start_service_ctrl_dispatcher('purefectCron');
while (win32_get_last_control_message()!= WIN32_SERVICE_CONTROL_STOP)
{
echo('[' . date('c') . '] checking...');
// taro kode service disini
sleep(30);
}
}
?>
Kalo mau download, klik disini : cronphp.txt
Penjelasannya :
if ($argv[1] == ‘install’)
{baris ini digunakan untuk mengecek parameter yang dipassing dari command line, bagian ini untuk proses install service.
win32_create_service(array(
'service' => 'purefectCron',
'display' => 'purefectCron',
'path' => 'c:wampphpphp-win.exe',
'params' => '-c c:wampApache2bin c:wampwwwcron.php run',
));baris ini untuk mendaftarkan service dengan nama “purefectCron”. Service dan display boleh diganti, tapi saya saranin diisi dengan nilai yang sama.
path menunjuk ke exe dari PHP, saya gunain php-win.exe yang ada di c:\wamp\php
params adalah parameter yang akan dipassing ke php.exe saat menjalankan service.
-c c:\\wamp\\Apache2\\bin maksudnya adalah menggunakan konfigurasi php.ini yang ada di folder c:\wamp\Apache2\bin
c:\\wamp\\www\\cron.php run maksudnya php.exe menjalankan script cron.php yang ada di c:\wamp\www, dengan parameter “run”
else if ($argv[1] == ‘uninstall’)
{baris ini untuk filter operasi uninstall service
win32_delete_service('purefectCron');untuk menghapus service dari daftar service, parameternya adalah nama service yang sesuai dengan nama service/display waktu proses install.
else if ($argv[1] == ‘run’)
{filter untuk proses ngejalanin service, bagian ini nanti yang dijalanin sama windows
chdir('c:\\wamp\\www');Ganti working directory ke c:\wamp\www, maksudnya supaya kode selanjutnya berjalan di folder tersebut, jadi mirip sama kode web page punya kita.
win32_start_service_ctrl_dispatcher('purefectCron');Baris ini untuk men-start servicenya, parameternya samain dengan nama service/display waktu proses install.
while (win32_get_last_control_message() != WIN32_SERVICE_CONTROL_STOP)
{Kita looping selama belom di stop
writeln('[' . date('c') . '] checking…’);
// taro kode service disini
sleep(30);Taro kode service anda disini, sebenernya gak masuk sense sih echoin string, tapi ini cuma contoh doang. Ubah kode diatas sesuai dengan kebutuhan service kamu.
trus untuk install servicenya, buat file :
c:\wamp\install.batyang isinya :
cd www
"../php/php.exe" -c ../Apache2/bin cron.php install
reg add HKLM\SYSTEM\CurrentControlSet\Services\purefectCron /V Description /t REG_SZ /d "Purefect Cron Daemon" /f
NET START purefectCronkalo mau download, klik disini installbat.txt
Penjelasan :
cd www
"../php/php.exe" -c ../Apache2/bin cron.php installBaris ini untuk jalanin cron.php untuk nginstall servicenya
reg add HKLM\SYSTEM\CurrentControlSet\Services\purefectCron /V Description /t REG_SZ /d "Purefect Cron Daemon" /fSebenernya baris ini optional, gunanya untuk mengeset description dari service (soalnya saya gak tau gimana ngesetnya dari php
jadi manual aja)
NET START purefectCronBaris ini untuk start jalanin servicenya
untuk uninstallnya, buat file :
c:\wamp\uninstall.batyang isinya :
NET STOP purefectCron
cd www
"../php/php.exe" -c ../Apache2/bin cron.php uninstallkalo mau download, klik disini : uninstallbat.txt
Penjelasan :
NET STOP purefectCronKita berhentiin dulu sebelum uninstall
cd www
"../php/php.exe" -c ../Apache2/bin cron.php uninstallpanggil script cron.php, bagian uninstall.
Segitu aja penjelasan dari saya, kalo ada yang kurang jelas ato mau diskusi, bisa taro comment disini, ato kirim email ke denny(at)klorofil.org
March 3rd, 2007 at 6:30 pm
Hello, nice site look this:
http://w66.aswilenber.ru/gioco-scaricabile-gratis/ , gioco scaricabile gratis, [URL=http://w66.aswilenber.ru/gioco-scaricabile-gratis/]gioco scaricabile gratis[/URL]
End ^) See you
April 20th, 2007 at 3:28 pm
Cool…,
Keren nih tekniknya. Saya udah coba dengan paket xampp dan bisa jalan. Cuman sempat bengong juga ga liat date yang diecho-in sama si service.
June 26th, 2007 at 8:12 pm
Ada yang tau script php unutk start or stop service dilinux..
ex. dengan button, pada saat di klik service akan start ato mati…
tolong bantuannya…
November 26th, 2007 at 4:35 pm
Stop taking paxil tenuate prescriptions online….
Physical side effects of paxil….
December 5th, 2007 at 9:51 am
Dogpile find me phentermine overnight rush sale….
Phentermine overnight delivery. Where to find phentermine c.o.d overnight the best. Phentermine overnight. Phentermine overnight no prior….
February 24th, 2008 at 3:41 am
nanya..
Kalo dah jalan di service, gimana caranya agar file tersebut bisa menjalankan aksi secara berulang dengan delay time tertentu? contoh monitoring isi suatu tabel di mysql.
Thanks..
February 25th, 2008 at 2:38 pm
tinggal ubah di line
while (win32_get_last_control_message()!= WIN32_SERVICE_CONTROL_STOP)
{
echo(’[’ . date(’c') . ‘] checking…’);
// taro kode service disini– fungsi sql sini
sleep(30);
}
interval di fungsi sleep (dalam satuan detik), kalo mo liat log, di echoin aja pake error_log();
April 12th, 2008 at 12:02 am
Yth mas deni,
saya sdh coba buat windows service spt diatas, tapi pas dijalanin install.bat nya ada parsing error di line 3 cron.php. knp ya?
thanks
September 27th, 2008 at 1:26 pm
zusl epvlsmux zliwspune orfq rbohmwpt iukoq xopsceyfw