Perl: Dalam Contoh Praktis 4 ( Web scripting, CGI Common-Gateway-Interface didalam Perl. ) Oleh : Faiq Azmi [faiq.azmi@bakrietelecom.com] 1
1. Apakah CGI itu. CGI adalah kependekan dari Commont Gateway Interface, yaitu sebuah interface untuk mentransfer informasi antara WWW/Web server dengan sebuh CGI program/script/aplikasi. Sebuah CGI program/script/applikasi dibuat untuk menerima dan mengembalikan data yang memenuhi dari sebuah CGI spesifikasi. CGI program bisa ditulis dari berbagai macam bahasa pemograman, antara lain C, Perl, Java atau sekalipun Visual Basic. 2. Perl CGI. Perl CGI adalah CGI web scripting yang ditulis menggunakan bahasa pemograman perl. Ada 2 type cara didalam perl untuk proses menerima data dari web: a. Menggunakan ENV dari parameter web. b. Menggunakan Modul CGI perl. Sebetulnya keduanya mengambil ENV dari web method, hanya bedanya yang Pertama (a) kita menuliskan sendiri parameter tersebut sedangkan yang kedua kita tinggal memakai modul tanpa tahu method parameter karena sudah ada didalam modul CGI. 3. CGI Scripting didalam Perl. Seperti telah disebutkan diatas ada 2 type CGI scripting menggunakan modul CGI dan tidak menggunakan modul, dari 2 buah pembacaan data yang terkirim dari web yaitu method GET dan POST. a. CGI perl dengan tidak menggunakan modul CGI. 2
Contoh script ---------------------------------------------------------------------- read(stdin, $input, $ENV{'CONTENT_LENGTH') if ( $ENV{'REQUEST_METHOD' eq 'POST'); $input = $ENV{'QUERY_STRING' if ( $ENV{'REQUEST_METHOD' eq 'GET'); @pairs=split(/&/,$input); foreach $item(@pairs){ ($key,$content)=split(/=/,$item,2); $content=~tr/+/ /; $content=~s/%(..)/pack("c",hex($1))/ge; $fields{$key=$content; $name = $fields{'name'; print "Content-type: text/html\n\n"; print "Nama : $name"; ---------------------------------------------------------------------- b. CGI perl dengan modul CGI. Download CGI perl modul di http://search.cpan.org Untuk Active Perl pada umumnya modul CGI sudah ada jadi kita tidak perlu untuk melakukan instalasi lagi. Contoh script ---------------------------------------------------------------------- use CGI; $q = new CGI; $name = $q->param('name); print $q->header; print "Nama : $name"; ---------------------------------------------------------------------- 4. CGI Perl dan Apache Webserver. 3
CGI perl bisa berjalan disemua / kebanyakan web server, untuk saat ini kita akan membahas didalam webserver yang sudah umum dan sangat banyak dipakai yaitu Apache webserver. a. Header Perl Script. Perlu diingat didalam Apache webserver pada basic configuration interprenter perl akan didefine didalam header setiap script perl, yg dimulai #!<lokasi-perl> - Contoh CGI perl header untuk *nix / linux. #!/usr/bin/perl atau misalnya di direcktory lain #!/usr/local/activeperl-5.8.8/bin/perl - Contoh CGI perl heade untuk windows. atau misalnya di direcktory lain #!d:/program/perl/bin/perl b. CGI Apache konfigurasi di httpd.conf. Contoh di virtual directory <VirtualHost 192.168.x.x:80> ServerAdmin webmaster@server2 DocumentRoot /config/html ServerName server2 ErrorLog logs/server2-errorlog.log CustomLog logs/server2-customlog.log common ############ SCRIPT PERL ##################### ScriptAlias /cgi-bin/ "/var/www/cgi-bin/server2/" <Directory "/var/www/cgi-bin/server2"> AllowOverride None Options None Order allow,deny Allow from all </Directory> ScriptAlias /script/ "/var/www/cgi-bin/server3/" <Directory "/var/www/cgi-bin/server3"> AllowOverride None Options None Order allow,deny Allow from all </Directory> ########## END PERL ########################## </VirtualHost> Didalam contoh apache config tersebut ada 2 buah virtual directory script yaitu Http://192.168.x.x/cgi-bin/ dan http://192.168.x.x/script/ 4
Keduanya bisa me-run script perl jika kita simpan file script cgi perl yang tentunya sudah di chmod 755 / di mode executable. Sedangkan untuk CGI perl di webserver lainnya, pada intinya adalah merouting interprenter ke perl directory. 5. Contoh CGI Perl script. a. Contoh script: contoh1.pl --------------------------------------------------------------------------------------------- use CGI; $q = new CGI; print $q->header; print "Hello World!!"; --------------------------------------------------------------------------------------------- Output / Display didalam Web browser. b. Contoh script: form1.pl 5
--------------------------------------------------------------------------------------------- use CGI; $q = new CGI; $script= '/cgi-bin/form1.pl'; $but = $q->param('button'); $fname = $q->param('fname'); $lname = $q->param('lname'); print $q->header; if ( $but =~ /Kirim/ ){ open_form($fname,$lname); print "<hr>\n"; print "Terima kasih - Atas submit Anda!<br>\n"; print "First Name : <font color=#13b121>$fname</font><br>\n"; print "Last Name : <font color=#13b121>$lname</font><br>\n"; print "<hr>\n"; else{ open_form(); sub open_form{ my($fname,$lname) = @_; print <<EOT; <html> <body bgcolor=#f8f8f8> <form method=post action=$script> First Name : <input type=text name=fname size=10 value="$fname"> <br> Last Name : <input type=text name=lname size=10 value="$lname"> <br> <input type=submit name=button value=kirim> </form> </body> EOT --------------------------------------------------------------------------------------------- Output / Display didalam Web browser. 6
c. Contoh script penggabungan ajax dan cgi, ajax.html dan simplex-ajaxexample.pl File : ajax.html ----------------------------------------------------------------------------------------------------- <title>simple Ajax Example</title> <script language="javascript"> function xmlhttppost(strurl) { var xmlhttpreq = false; var self = this; // Mozilla/Safari if (window.xmlhttprequest) { self.xmlhttpreq = new XMLHttpRequest(); // IE else if (window.activexobject) { self.xmlhttpreq = new ActiveXObject("Microsoft.XMLHTTP"); self.xmlhttpreq.open('post', strurl, true); self.xmlhttpreq.setrequestheader('content-type', 'application/x-www-form-urlencoded'); self.xmlhttpreq.onreadystatechange = function() { if (self.xmlhttpreq.readystate == 4) { updatepage(self.xmlhttpreq.responsetext); self.xmlhttpreq.send(getquerystring()); function getquerystring() { var form = document.forms['f1']; var word = form.word.value; qstr = 'w=' + escape(word); // NOTE: no '?' before querystring return qstr; function updatepage(str){ document.getelementbyid("result").innerhtml = str; 7
</script> </head> <body> <form name="f1"> <p>word: <input name="word" type="text"> <input value="go" type="button" onclick='javascript:xmlhttppost("/cgi-bin/simple-ajax-example.cgi")'></p> <div id="result"></div> </form> </body> </html> ----------------------------------------------------------------------------------------------------- File : ajax-simple-example.pl ----------------------------------------------------------------------------------------------------- use CGI; $query = new CGI; $secretword = $query->param('w'); $remotehost = $query->remote_host(); print $query->header; print "<p>the secret word is <b>$secretword</b> and your IP is <b>$remotehost</b>.</p>"; ----------------------------------------------------------------------------------------------------- Display Output Web browser Daftar Pustaka 1. www.google.com 2. Pengalaman Penulis. 8