Archive for July, 2009

Koneksi ke Microsoft SQL Server dengan PHP di FreeBSD

Beberapa hari yang lalu gwa melakukan perpindahan server Binus Access ke server baru yang menggunakan FreeBSD ( sebelumnya menggunaka Ubuntu Server 8.04 ). Setelah melakukan konfigurasi-konfigurasi dan beberapa persiapan yaitu :

  • Backup database dan file website Binus Access
  • Konfigurasi Nginx ( web servernya ganti Nginx ) agar bisa membaca mod_rewrite
  • Setting NFS dari server asterix ke server Binus Access
  • Setting IP
  • Beberapa settingan kecil lainnya

Jadi setelah dirasa semua persiapan sudah kelar, akhirnya perpindahan server dilakukan yaitu mencabut kabel LAN di server lama dan mencoloknya di server baru ( yap pindahin server cuma begitu saja ). Nah setelah gwa melakukan perpindahan server gwa pun mencoba semua fitur-fitur yang ada di binus-access satu persatu apakah ada yang ga jalan. Ternyata eh ternyata pas gwa tes registrasi untuk user baru terjadilah error dimana yang kalau gwa telusuri dikarenakan server tersebut tidak dapat mengakses server binusmaya ( menggunakan mssql ).

Jadi gwa pun mulai mencek dengan menggunakan phpinfo(); apakah extension mssql sudah terinstall di server FreeBSD tersebut atau blum ( karena seingat gwa pas nginstall php-fpm extension mssql sudah gwa aktifkan ), pas gwa cek ternyata extension mssql sudah terinstall dengan benarnya ( berarti tidak ada kesalahan dengan extension mssql.

Setelah itu gwa pun mulai searching di google dan akhirnya ketemu sebuah artikel yang menyebutkan tentang FreeTDS, gwa sih kurang ngerti juga tentang FreeTDS tapi kalau artikel itu bilang kalau mau connect mssql menggunakan FreeBSD harus menggunakan FreeTDS ini. Oleh karena itu tanpa banyak cing cong langsung saja gwa install FreeTDS lewat ports FreeBSD, neh syntaxnya :

cd /usr/ports/databases/freetds
make install clean

Setelah menginstall FreeTDS langsung saja config freetds.confnya yang terletak di /usr/local/etc/freetds.conf ini isinya config freetds gwa :

#
#
#   $Id: freetds.conf,v 1.11 2005/12/05 21:34:12 freddy77 Exp $
#
# The freetds.conf file is a replacement for the original interfaces
# file developed by Sybase.  You may use either this or the interfaces
# file, but not both.
#
# FreeTDS will search for a conf file in the following order:
#
#     1) check if a file was set programatically via dbsetifile() and
#        is in .conf format, if so use that,
#
#     2) otherwise, if env variable FREETDSCONF specifies a properly 
#        formatted config file, use it,
#
#     3) otherwise, look in ~/.freetds.conf,
#
#     4) otherwise, look in @sysconfdir@/freetds.conf
#
# If FreeTDS has found no suitable conf file it will then search for
# an interfaces file in the following order:
#
#     1) check if a file was set programatically via dbsetifile() and 
#        is in interfaces format, if so use that,
#
#     2) look in ~/.interfaces
#
#     3) look in $SYBASE/interfaces (where $SYBASE is an environment
#        variable)
#
# Only hostname, port number, and protocol version can be specified
# using the interfaces format.
#
# The conf file format follows a modified Samba style layout.  There
# is a [global] section which will affect all database servers and
# basic program behaviour, and a section headed with the database
# server's name which will have settings which override the global
# ones.
#
# Note that environment variables TDSVER, TDSDUMP, TDSPORT, TDSQUERY, 
# and TDSHOST will override values set by a .conf or .interfaces file.
#
# To review the processing of the above, set env variable TDSDUMPCONFIG
# to a file name to log configuration processing.
#
# Global settings, any value here may be overridden by a database
# server specific section
[global]
        # TDS protocol version
	tds version = 4.2

;	initial block size = 512

	# uses some fixes required for some bugged MSSQL 7.0 server that
	# return invalid data to big endian clients
	# NOTE TDS version 7.0 or 8.0 should be used instead
;	swap broken dates = no
;	swap broken money = no

	# Whether to write a TDSDUMP file for diagnostic purposes
	# (setting this to /tmp is insecure on a multi-user system)
;	dump file = /tmp/freetds.log
;	debug flags = 0xffff

	# Command and connection timeouts
;	timeout = 10
;	connect timeout = 10
	
	# If you get out of memory errors, it may mean that your client
	# is trying to allocate a huge buffer for a TEXT field.  
	# (Microsoft servers sometimes pretend TEXT columns are
	# 4 GB wide!)   If you have this problem, try setting 
	# 'text size' to a more reasonable limit 
	text size = 64512

# This is a Sybase hosted database server, if you are directly on the
# net you can use it to test.
[JDBC]
	host = 192.138.151.39
	port = 4444
	tds version = 5.0

# The same server, using TDS 4.2.  Used in configuration examples for the
# pool server, since the pool server supports only TDS 4.2.
[JDBC_42]
	host = 192.138.151.39
	port = 4444
	tds version = 4.2

# The client connecting to the pool server will use this to find its
# listening socket.  This entry assumes that the client is on the same
# system as the pool server.
[mypool]
	host = 127.0.0.1
	port = 5000
	tds version = 4.2

# A typical Microsoft SQL Server 7.0 configuration	
;[MyServer70]
;	host = ntmachine.domain.com
;	port = 1433
;	tds version = 7.0

# A typical Microsoft SQL Server 2000 configuration
[stored]
	host = 10.21.50.16
	port = 1433
	tds version = 8.0
	
# A typical Microsoft SQL Server 6.x configuration	
;[MyServer65]
;	host = ntmachine.domain.com
;	port = 1433
;	tds version = 4.2

jadi buat settingan mssql buat server binusmaya itu gwa letakin di bagian ini :
# A typical Microsoft SQL Server 2000 configuration
[stored]
	host = xx.xx.xx.xx
	port = 1433
	tds version = 8.0

ganti tulisan xx.xx.xx.xx dengan ip server SQL Server nya. Nah sekarang saatnya mencoba melakukan koneksi ( ada sedikit perbedaan cara melakukan koneksi ) begini contoh codingnya dalam PHP :

$host = "stored";
$user = "yourusername";
$pass = "yourpassword";
$db = mssql_connect($host,$user,$pass) or die ("Unable to connect to mssql databases");

Jadi perbedaannya adalah $host yang harus diisi dengan nama yang ada set di freetds.conf tadi, jadi jika pada freetds.conf ada menset namanya menjadi "mssql" maka pada host anda ubah menjadi "mssql". Kira-kira begitulah caranya yang cukup membuat gwa pusing selama 2 jam mencari-cari caranya. Lanjut ngejunk lagi ah :P

Setting mod_rewrite atau SEF Joomla di Nginx

Yap sambil menunggu server World of Warcraft yang tak kunjung up-up gwa buat tutorial sedikit tentang setting mod_rewrite Joomla di Nginx. Sudah pada tau Nginx ? kalau belum tau gwa kasih tau dah. Nginx itu adalah salah satu web server seperti Apache, Lighttpd, Apache Tomcat, Jetty, IIS, Zeus dan lainnya. Nginx ini ( dibacanya Engine X ) kabarnya sih lebih cepat dan stabil dibandingkan Apache yang sudah tersohor sebagai server PHP. Untuk detail lengkap tentang fitur-fiturnya silakan baca link ini.

Kalau pengen liat perbandingan kecepatannya dapat googling sendiri soalnya gwa juga blom coba ngetes kecepatannya soalnya gwa cuma pengen ngetes aja bedanya makai Nginx dan Lighttpd. Setelah gwa menggunakan kedua web server yang katanya lebih “cepat” dari Apache tersebut gwa menemukan salah satu fitur penting yang kurang yaitu kemampuan kedua web server tersebut untuk membaca file .htaccess, dan itu artinya apa ? itu artinya kita tidak bisa langsung memakai fitur-fitur mod_rewrite yang sudah disediakan engine-engine dan framework-framework seperti CakePHP, Joomla, dan WordPress.

Tapi untunglah teknologi sudah maju, cukup search-search dikit ternyata langsung dapat deh tutorial mod_rewrite Joomla di Nginx. Tapi walaupun teknologi sudah maju tapi ternyata tutorial yang didapat tidak cukup maju ( alias dicoba-coba ga jalan ). Jadi daripada ntar ada orang yang bernasib sama kek gwa makanya dengan senang hati gwa bikin ini tutorial hohoho. Ya udah kita back to topic tar kelamaan out of topic.

Nah, jadi untuk membuat mod_rewrite atau fitur SEF Joomla jalan di Nginx kita hanya perlu membuat rulesnya dan dengan sedikit tricky way kita bisa buat semua berjalan seperti di Apache. Kira-kira begini settingan nginx.conf gwa ( gwa ga bakal jelasin cara nginstall Nginx dan setting PHP ) :

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  binus-access.com v2.binus-access.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
	location / {
		root   /usr/local/www/data;
		index  index.html index.htm index.php;
		error_page 404 = @joomla; 
	}

	location @joomla { 
		rewrite ^(.*)$ /index.php?q=$1 last;
	}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        
        location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME /usr/local/www/data$fastcgi_script_name;
		include fastcgi_params;	
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        
#	location ~ \.php$ {
#            root           html;
#            fastcgi_pass   127.0.0.1:9000;
#            fastcgi_index  index.php;
#            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#            include        fastcgi_params;
#        }

         #deny access to .htaccess files, if Apache's document root
         #concurs with nginx's one
        
   #     location ~ /\.ht {
   #         deny  all;
   #   }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

Jadi kalau dilihat-lihat dari settingan nginx.conf gwa, cuma ada 2 hal bagian yang harus diperhatikan yaitu bagian ini :
	location / {
		root   /usr/local/www/data;
		index  index.html index.htm index.php;
		error_page 404 = @joomla; 
	}

	location @joomla { 
		rewrite ^(.*)$ /index.php?q=$1 last;
	}

Kalau ditranslate kira-kira bacanya begini : jika ada error page 404 maka dia akan set rules menjadi @joomla. Semoga tutorial ini berguna, kalau ga jalan coba dilihat-lihat dolo settingannya lagi soalnya TESTED dan WORKS ( silakan ke www.binus-access.com ) itu adalah web yang pakai Nginx. Btw, selain itu ada beberapa web besar yang menggunakan Nginx juga yaitu Kaskus dan WordPress. Jadi itu juga menambah keyakinan gwa untuk menggunakan Nginx ini. Sekian tutorial dari gwa, kalau ada pertanyaan comment ato add YM aja di channel_life.

Hal yang paling menyenangkan dalam membuat sebuah aplikasi

Satu hal yang paling menyenangkan dalam membuat sebuah aplikasi adalah melihat aplikasi yang kita buat digunakan dan ternyata sangat berguna bagi orang banyak. Ketika orang yang menggunakan aplikasi kita mengatakan bagaimana begitu terbantunya mereka dengan aplikasi yang telah kita buat, begitu senangnya mereka menggunakan layanan yang kita berikan, begitu sukanya mereka dengan design website yang kita buat, itu adalah hal-hal yang rasanya tidak ternilaikan. Hal tersebut lebih menyenangkan daripada melihat uang hasil dari pengerjaan website masuk ke rekening kita.

Gwa teringat perkataan seseorang tentang kenapa dia begitu suka akan design dan akan terus belajar design. Pada saat itu dia berkata bahwa yang dia suka dari design adalah saat ketika semua orang mengatakan bahwa designnya bagus dan mengagumi kemampuan yang dia miliki. Saat itu juga gwa merasakan heran sekali dan berpikir “Bisa ya orang suka sesuatu hanya karena dia suka dipuji, gila hormat bener” pikir gwa saat itu.

Tapi sekarang gwa tidak menyalahkan pendapat dia sepenuhnya, tetapi juga tidak membenarkan pendapat dia sepenuhnya. Sekarang gwa suka membuat website dan gwa menikmati saat-saat membuat website, tetapi terkadang gwa merasa sangat jenuh dengan pekerjaan gwa itu. Gwa merasa kemampuan gwa kurang, tempat belajar gwa tidak mendukung, dan waktu yang tersisa semakin sedikit. Tapi di sela-sela kejenuhan itu, melihat orang berkomentar tentang bagaimana senangnya mereka menggunakan aplikasi yang telah kita buat, secara tidak langsung seakan-akan kejenuhan itu hilang dan semangat itu muncul lagi.

Mungkin yang dimaksud akan passion dalam pekerjaan itu sebenarnya bukanlah disaat kita melakukan suatu pekerjaan, tetapi lebih ke impact yang timbulkan dari pekerjaan yang kita lakukan. Yah at least for now I find my way again :) thx everyone for your comments