วันจันทร์ที่ 29 พฤศจิกายน พ.ศ. 2553

SSI มาจากคำเต็มว่า

SSI มาจากคำเต็มว่า Server Side Include ตัว SSI เป็นลักษณะแนวความคิดแบบ server side script คือสามารถเขียนโค้ด SSI แทรกลงไปในเอกสาร HTML ได้โดยไม่ต้องแยกโค้ดนั้นออกมาเขียนเพื่อรันเป็นอิสระเหมือน CGI ผู้อ่านที่เคยใช้ ASP (Active Server Pages) และ PHP มาก่อน จะทราบว่า ASP และ PHP  ก็เป็น server side script เช่นเดียวกัน

SSI จะยอมให้เรานำข้อมูลไปแทรกลงในเอกสาร HTML ได้อย่างง่าย ๆ โดยไม่จำเป็นต้องเขียน CGI (แต่ SSI จะเรียก CGI ให้มาทำงานก็ได้ ถ้าเราต้องการ)  ในแง่มุมของผู้พัฒนาเว็บเพจแล้ว จะรู้สึกว่า SSI เป็นเพียงแค่ แท็ก ๆ หนึ่ง ที่เขาสามารถเลือกนำไปเขียนแทรกในเอกสาร HTML ตรงไหนก็ได้เหมือนกับการเขียนแท็ก HTML ธรรมดาทั่วไป

ตัวอย่างต่อไปนี้เป็นเอกสาร
HTML ชื่อว่าไฟล์ว่า exam1.shtml (Web Server ที่กำลังใช้อยู่เป็น IIS5 และได้ enable SSI เป็น .shtml) ที่มีโค้ค SSI สั่งให้แสดงวัน-เวลาปัจจุบันของเซิร์ฟเวอร์ ดูผลลัพท์ได้ ที่นี่

exam1.shtml
----------------------------------------------------------------------
<html>
<head><title>
Insert Date & Time to HTML
</title>
</head>
<body>
    <h1>Date & Time</h1>
    <!--#echo var="DATE_local" -->
</body>
</html>
----------------------------------------------------------------------

จากตัวอย่าง exam1.shtml จะเห็นว่าการใช้ SSI นั้นง่ายมาก  เพียงแต่เขียนแท็ก <!--   --> และบอกสิ่งที่ต้องการไว้ในเอกสาร HTML เมื่อมีผู้ใช้ร้องขอเปิดไฟล์เอกสาร HTML เว็บเซิร์ฟเวอร์จะวิ่งไปตรวจดูในเอกสาร HTML ทีละบรรทัดว่ามีการเขียนโค้ด SSI ไว้หรือไม่ ถ้าพบโค้ด SSI ตำแหน่งใด ๆ ก็ตาม  เว็บเซิร์ฟเวอร์จะทำงานตามโค้ด SSI ที่เขียนสั่งไว้  แล้วเอาคำตอบที่ได้มาเขียนแทนโค้ด SSI เดิมที่มีอยู่  ดังนั้นจากตัวอย่างที่เขียนโค้ด SSI ไว้ว่า <!--#echo var="DATE_LOCAL"--> จึงเป็นการสั่งให้แสดงค่าตัวแปรที่ชื่อ DATE_LOCAL (วันที่และเวลาปัจจุบันในเซิร์ฟเวอร์) ของ SSI ออกมา

เว็บเซิร์ฟเวอร์จะหาคำตอบของโค้ด
SSI มาใส่และตัดโค้ด SSI นั้นออก (รวมทั้งแท็ก <!-- และ -->) ทางฝั่งผู้ใช้ที่ได้รับเว็บเพจไปดู  จึงไม่มีโอกาสเห็นโค้ด SSI ที่เขียนแทรกไว้ในเอกสาร HTML เลย

เว็บเซิร์ฟเวอร์รู้ได้อย่างไรว่าเป็น
SSI
สิ่งแรกที่ต้องทราบก็คือว่าเว็บเซิร์ฟเวอร์ที่เราใช้งานอยู่ ยอมให้ใช้ SSI ได้หรือเปล่า  อีกอย่างก็คือไฟล์เอกสาร HTML ที่ยอมให้ใช้ SSI ได้นั้นจะต้องเก็บไว้ด้วยนามสกุลอะไร .shtml หรือว่า .shtm จึงจะใช้งาน SSI ได้  ซึ่งโดยปกติมักจะเป็น .shtml

เว็บเซิร์ฟเวอร์หลายที่ไม่เปิดให้ใช้  SSI กันเพราะทุกครั้งที่มีการร้องขอไฟล์เอกสาร HTML (ที่สามารถใช้ SSI ได้) มายังเว็บเซิร์ฟเวอร์ เว็บเซิรฟเวอร์จะต้องทำงานหนักกว่าปกติ  คือต้องมีการตรวจดูเอกสาร HTML ทุกบรรทัด เพื่อหาโค้ด SSI ที่แทรกอยู่  แล้วหาคำตอบมาใส่แทน พร้อมกับสร้างเอกสาร HTML ใหม่ส่งกลับให้ผู้ใช้ และถึงแม้ว่าไม่มีโค้ด SSI แทรกอยู่เลยก็ตาม เว็บเซิร์ฟเวอร์คงต้องทำอย่างนี้ทุกครั้งเสมอ

เว็บเซิร์ฟเวอร์ที่ยอมให้ใช้ SSI จึงมีการแบ่งกลุ่มไฟล์เอกสาร HTML ไว้ชัดเจนว่า นามสกุลอะไรจึงจะสามารถใช้โค้ด SSI ได้ สมมุติว่าในเว็บเซิร์ฟเวอร์กำหนดให้ไฟล์นามสกุล .shtml เป็นไฟล์ที่สามารถใช้ SSI ได้ ดังนั้นถ้าเว็บเซิร์ฟเวอร์ได้รับคำร้องขอไฟล์ที่ไม่ใช่นามสกุล .shtml เข้ามา เว็บเซิร์ฟเวอร์ก็จะส่งเนื้อหาของไฟล์นั้นกลับไปให้ผู้ร้องขอได้ทันที  โดยไม่ต้องตรวจหา SSI ที่แฝงอยู่  ถึงแมจะมี SSI เขียนไว้ก็จะไม่ได้รับการตีความหมายใด ๆ

เหตุผลที่มีการแทรก
SSI ไว้ในแท็ก <!--  --> ก็เพราะถ้าเกิดในกรณีที่มีการเขียนโค้ด SSI ไว้ในไฟล์นามสกุลที่เว็บเซิร์ฟเวอร์ไม่ให้ใช้ SSI หรือมีข้อผิดพลาดใด ๆ ที่ทำให้ SSI ไม่สามารถทำงานได้ เว็บเบราเซอร์ก็จะได้ไม่ต้องเอาโค้ด SSI นั้นไปแสดงออกทางเว็บเพจ  เพราะโค้ด SSI อยู่ในแท็ก <!--  --> ซึ่งเว็บเบราเซอร์มองว่าเป็นเพียง comment เท่านั้น

ขอดีและข้อเสียของ
SSI
ข้อดีคือทำให้ผู้พัฒนาเว็บเพจทั่ว ๆ ไป สามารถนำสิ่งที่เขาต้องการแทรกลงในเอกสาร HTML ได้ โดยที่ไม่ต้องไปข้องเกี่ยวกับการเขียน CGI ให้ยุ่งยาก สำหรับนักพัฒนา CGI ก็สามารถเอา CGI ที่เขียนมาทำงานร่วมกับ SSI ได้อีกด้วย คือให้ SSI ไปเรียก CGI ทำงาน  แล้วเอาผลการทำงานของ CGI มาแทรกลงในเอกสาร HTML อีกทีหนึ่ง  สรุปก็คือ  ความง่ายและยืดหยุ่นนั่นเองที่เป็นข้อดีของการใช้ SSI

ข้อเสียก็คือทุกครั้งที่เว็บเซิร์ฟเวอร์ได้รับการร้องขอเอกสาร HTML และเอกสารนั้นกำหนดให้ใช้ SSI ได้ด้วยแล้ว  เว็บเซิร์ฟเวอร์จะต้องวิ่งหาโค้ด SSI ที่แทรกอยู่ในเอกสาร  เพื่อปรับเปลี่ยนเป็นข้อมูลแล้วนำไปสร้างเป็นเอกสาร HTML ที่สมบูรณ์  ก่อนจะส่งไปให้ผู้ที่ร้องขอ  ถ้าเอกสาร HTML นั้นมีขนาดเล็กก็ไม่เป็นไร แต่ถ้าขนาดใหญ่แล้ว จะทำให้ประสิทธิภาพในการให้บริการของเว็บเซิร์ฟเวอร์ลดลง

แต่ก็ยังไมอันตรายเท่ากับการเปิดให้ใช้
SSI แบบ EXEC (จะอธิบายต่อไป) คือยอมให้โค้ด SSI เข้าไปเรียกสคริปต์หรือ shell ในเซิร์ฟเวอร์ให้ทำงานได้  เพราะอาจจะเป็นช่องโหว่สำหรับผู้ที่ไม่ประสงค์ดีใช้เป็นช่องทางสำหรับโจรกรรมหรือกระทำการแปลก ๆ กับข้อมูลในเซิร์ฟเวอร์ได้ง่ายพอ ๆ กับ การได้สิทธิใช้โปรแกรม Telnet เข้าไปทำงานในเซิร์ฟเวอร์เลยทีเดียว

ตัวอย่างต่อไปนี้
(monitor.shtml) เป็นการใช้ SSI เพื่อไปเรียกคำสั่ง ในเซิร์ฟเวอร์ให้ทำงาน เนื่องจากเว็บเซิร์ฟเวอร์ที่กำลังใช้งานอยู่นี้เป็น Windows 2000 Server ดังนั้นคำสั่งต้องเป็นคำสั่งของ Window OS ซึ่งในตัวอย่างใช้คำสั่ง dir ถ้าเป็น UNIX OS ก็อาจจะใช้คำสั่งอื่นเช่น Finger, ls เป็นต้น

monitor.shtml
------------------------------------------------------------------------------------
<html>
<head><title>User Monitor</title>
<meta http-equiv="refresh" content ="5;url=monitor.shtml">
</head>
<body>
  <pre>
      <!--#exec cmd="dir"-->
</body>
</html>
------------------------------------------------------------------------------------

ดูผลการทำงาน ที่นี่ ครับ เนื่องจาก IIS5 บน Window 2000 Server ไม่ยอมให้มีใช้คำสั่ง
exec cmd ได้ ดังนั้นในการดูผลให้สังเกตดูด้วยนะครับว่าเป็นการดูผลที่พอร์ต 82 (http://202.129.16.28:82/ssi/monitor.shtml) ซึ่งได้ลง Apache ไว้ที่พอร์ต 82 ครับ นั่นคือ Apache อนุญาตให้คำสั่งนี้ได้

ลองคิดดูสิครับว่า จากตัวอย่างข้างบน ถ้ามีการคำสั่งอื่น ๆ ที่มีอันตรายต่อเซิร์ฟเวอร์จะเกิดอะไรขึ้น คงคิดได้นะครับ

สรุปข้อเสียของ
SSI อันดับแรกก็คือ ประสิทธิภาพและความเร็วในการทำงานเซิร์ฟเวอร์ที่อาจลดลงได้  และข้อเสียที่สำคัญคือเรื่องของความปลอดภัย  ในการใช้คำสั่ง ecex cmd

กฎเกณฑ์เบื้องต้นของการเขียน SSI
ข้อควรระวังในการเขียนโค้ด SSI ก็คือ ตัวอักษรพิมพ์เล็ก-พิมพ์ใหญ่ จะมีผลต่อการตีความหมายด้วย  และยังมีเงื่อนไขปลีกย่อยตามกฎเกณฑ์การเขียนโค้ด SSI ดังต่อไปนี้ :
  • ระหว่างแท็ก <!- กับ #command ต้องเขียนติดกันโดยไม่มีช่องว่างคือเขียนเป็น <!--#command
  • ค่าของพารามิเตอร์จะต้องคร่อมด้วยเครื่องหมายคำพูดแบบ " (Double Qoute)
  • หลังจากที่จบเครื่องหมาย " ของค่าพารามิเตอร์แล้ว จะต้องเว้นช่องว่างก่อนเขียนตัวปิด ->
สำหรับเว็บเซิร์ฟเวอร์บางตัวก็ไม่ได้ยึดตามกฎเกณฑ์นี้มากนัก  จึงต้องทดลองกันเองแต่การเขียนให้ถูกต้องตามกฎเกณฑ์จะช่วยลดปัญหาต่าง ๆที่อาจเกิดขึ้นได้ และมั่นใจได้ว่าจะนำไปใช้งานกับเว็บเซิร์ฟเวอร์อื่น ๆ ได้อย่างไม่มีปัญหาด้วย

คำสั่งของ
SSI
ในตารางต่อไปนี้แสดงคำสั่งต่าง ๆ ของ SSI ซึ่งแต่ละคำสั่งมีพารามิเตอร์และค่าพารามิเตอร์จำแนกแยกย่อยลงไปอีก
 
คำสั่ง หน้าที่การทำงาน
echo แทรกค่าตัวแปร SSI ลงในเอกสาร HTML
flastmod แทรกวันที่แก้ไขไฟล์ครั้งสุดท้ายของไฟล์ใด ๆ ลงในเอกสาร HTML
fsize แทรกขนาดของไฟล์ใด ๆ ลงในเอกสาร HTML
config กำหนดรูปแบบของเวลา, ขนาดไฟล์, และข้อความผิดพลาดที่จะแสดงออกมา
include เอาเนื้อหาของไฟล์ HTML อื่นมาแทรกลงในเอกสาร HTML
exec เรียกโปรแกรม, เชลล์ หรือสคริปต์ CGI ให้ทำงานและนำผลการทำงานแทรกลงในเอกสาร HTML
คำสั่ง echo โชว์ค่าตัวแปรของเซิร์ฟเวอร์
เริ่มจากคำสั่ง echo กันก่อน  เพราะถือว่าเป็นคำสั่งพื้นฐานของ SSI การทำงานของคำสั่ง นี้คือนำเอาค่าตัวแปร (ที่มีการกำหนดไว้ในเว็บเซิร์ฟเวอร์) มาแทรกลงในเอกสาร HTML

คำสั่งนี้ต้องการพารามิเตอร์คำว่า var และบอกชื่อตัวแปรเป็นค่าของพารามิเตอร์เท่านั้น ชื่อตัวแปรพื้นฐานของเว็บเซิร์ฟเวอร์ที่สามารถเขียนเป็นค่าของพารามิเตอร์ var ได้ แสดงไว้ในตารางข้างล่าง
 
ชื่อตัวแปร ใช้แสดงข้อมูล
DATE_LOCAL วัน-เวลา ปัจจุบันของเซิร์ฟเวอร์ในรูปแบบท้องถิ่น
DATE_GMT วัน-เวลา ปัจจุบันของเซิร์ฟเวอร์ในรูปแบบ GMT
DOCUMENT_NAME ชื่อไฟล์เอกสาร HTML ปัจจุบัน
DOCUMENT_URI URI ของเอกสาร HTML ปัจจุบัน
LAST_MODIFIED วัน-เวลา ครั้งสุดท้ายที่เอกสาร HTML ถูกแก้ไข
QUERY_STRING_UNESCAPED ข้อมูลที่ไคลเอ็นต์ส่งมาให้เอกสาร HTML แบบ GET และถอดรหัส escape ออกแล้ว
ตัวอย่างต่อไปเป็นการเขียนโค้ด SSI เรียกค่าตัวแปรต่าง ๆ ตามตาราง มาแสดงในเว็บเพจ ดูผลได้ ที่นี่

env.shtml
 <html>
<head><title>echo command</title></head>
<body>
    <pre>
    Date Local : <!--#echo var="DATE_LOCAL" -->
    Date GMT :  <!--#echo var="DATE_GMT" -->
    Document Name : <!--#echo var="DOCUMENT_NAME" -->
    Document URI :  <!--#echo var="DOCUMENT_URI" -->
    Last Modified : <!--#echo var="LAST_MODIFIED" -->
    Query String : <!--#echo var="QUERY_STRING_UNESCAPED" -->
</body>
</html>
-------------------------------------------------------------------------------------------------------

ตัวแปรที่สามารถเรียกให้มาแสดงด้วยคำสั่ง echo ของ SSI นั้นไม่ได้จำกัดเพียงแค่ชื่อตัวแปรดังตารางข้างบนเท่านั้น แต่ยังสามารถเอาชื่อตัวแปรแวดล้อมของเว็บเซิร์ฟเวอร์มาแสดงได้อีกด้วย ตัวแปรแวดล้อมที่นิยมแสดงผ่าน SSI มีดังตารางข้างล่าง
 

ชื่อตัวแปร ใช้แสดงข้อมูล
SERVER_SOFTWARE ชื่อโปรแกรมเว็บเซิร์ฟเวอร์
SERVER_NAME ชื่อของเซิร์ฟเวอร์
HTTP_USER_AGENT ชื่อโปรแกรมที่ผู้ใช้เรียกเปิดเอกสาร HTML
REMOET_ADDRESS หมายเลข IP Address ของเครื่องผู้ใช้
REMOTE_HOST ชื่อโฮสต์และโดเมนของเครื่องผู้ใช้
ตัวอย่างต่อไปนี้ (exam2.shtml) เป็นการนำค่าตัวแปรแวดล้อมไปแสดงในเว็บเพจ  ดูผลได้ ที่นี่

exam2.shtml
--------------------------------------------------------------------------------------------------------------------
<html>
<head><title>Welcome to SSI</title></head>
<body>
     <center>
     <h2>ยินดีต้อนรับสู่ SSI</h2>
     คุณมาจาก IP Address : <b><!--#echo var="REMOTE_ADDR" --></b><br>
     ชื่อโดเมน                         : <b><!--#echo var="REMOTE_HOST" --></b><br>
     เว็บเบราเซอร์                   : <b><!--#echo var="HTTP_USER_AGENT" --></b><br>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------

คำสั่ง
include ใช้ดึงเนื้อหาไฟล์อื่นมาแทรก

คำสั่ง include ถือว่าเป็นคำสั่งที่มีประโยชน์อีกคำสั่งหนึ่งของ SSI เพราะทำให้เราสามารถดึงเอาเนื้อหาของไฟล์อื่นมาแทรกลงในเอกสาร HTML ได้อย่างง่าย ๆ เว็บที่มีการอัพเดตข้อมูลบ่อย ๆ นิยมใช้วิธีนี้เพราะสะดวกมากกว่าการเข้าไปแก้เอกสาร HTML ทุกครั้งที่ข้อมูลมีการเปลี่ยนแปลง

พารามิเตอร์ของคำสั่ง
include มี 2 อย่างคือ file กับ virtual เพื่อให้เห็นตัวอย่างชัดเจนลองดูตัวอย่างสคริปต์ exam3.shtml ต่อไปนี้ และดูผลได้ ที่นี่

exam3.shtml
----------------------------------------------------------------------------------------
<html>
<head><title>Welcome to My page</title></head>
<body>
        <!--#include file="body.txt" -->
        <!--#include file="bottom.txt" -->
</body>
</html>
---------------------------------------------------------------------------------------

ในตัวอย่าง exam3.shtml มีการใช้คำสั่ง include เพื่อเรียกเอาเนื้อหาของไฟล์ body.txt และ bottom.txt เข้ามาแทรกในสคริปต์ exam3.shtml สมมุติว่าเนื้อหาของไฟล์ body.txt และ bottom.txt เป็นดังนี้

เนื้อหาของไฟล์
body.txt
--------------------------------------------------------------------------------------
<center>
<h1>ยินดีต้อนรับสู่โฮมเพจของเรา</h1>
<a href="http://www.southcat.net"<h1>Enter hear</h1></a>
</center>
-------------------------------------------------------------------------------------

เนื้อหาของไฟล์ bottom.txt
-------------------------------------------------------------------------------------
<center>
Copyright (C) 2000 , 2001 by SouthCat<br>
Contact <a href="mailto:ksorn@yahoo.com">
webmaster</a>
</center>

------------------------------------------------------------------------------------

file กับ virtual ต่างกันอย่างไร
file จะใช้กับเมื่อไฟล์นั้นอยู่ในไดเร็กทอรี่ปัจจุบันหรือไดเร็กทอรี่ย่อยที่ซ่อนอยู่ในไดเร็กทอรี่ปัจจุบัน  เช่น <!--#include file="body.txt." --> เป็นการระบุไปยังตำแหน่งไฟล์ตรง ๆ

virtual จะใช้เมื่อระบุถึงไฟล์ที่อ้างอิงจากไดเร็กทอรี่เอกสาร HTML หรือ document directory ของเว็บเซิร์ฟเวอร์เช่น <!--#include virtual="/project/2000/body.txt" -->

เรียกสคริปต์ CGI ให้ทำงานด้วยคำสั่ง exec

อย่างที่บอกตั้งแต่ต้นแล้วว่า SSI สามารถเรียกให้สคริปต์ CGI ทำงานแล้วนำผลการทำงานนั้นมาแทรกลงในเอกสาร HTML ได้ คำสั่งที่ใช้เขียนโค้ด SSI คือ exec คำสั่งนี้ทำให้ CGI ทำงานร่วมกับ SSI ได้ และดึงความสามารถของทั้งสองมาใช้ประโยชน์อย่างเต็มที่

พารามิเตอร์ของคำสั่ง
exec มี 2 อย่าง คือ cmd และ cgi
  • cmd ใช้เมื่อต้องการรันคำสั่งหรือเชลล์สคริปต์ของ Unix และ Windows (กรีของ Windows ขึ้นอยู่กับ Webserver ด้วยเพรา Webserver บางชนิดอาจไม่อนุญาตให้ใช้พารามิเตอร์ cmd) โดยบอกคำสั่งที่ต้องการรันเป็นค่าพารามิเตอร์เช่น <!--#exec cmd="ls" --> คือ การเรียกใช้คำสั่ง ls เพื่อให้แสดงรายชื่อไฟล์ทั้งหมดในไดเร็กทอรี่ปัจจุบันออกมา
  • cgi ใช้เมื่อต้องการให้ CGI ทำงาน ซึ่ง CGI นั้นอาจเป็น Script หรือโปรแกรมก็ได้ เช่น <!--#exec cgi="/cgi-bin/test.cgi" --> ในกรณีที่ใช้เว็บเซิร์ฟเวอร์ที่รันใน windows ก็อาจะเรียกไปยังไฟล์ CGI ที่มีนามสกุลเป็น .exe เลย เช่น <!--#exec cgi="/cgi-bin/counter.exe" --> ข้อสำคัญคือ CGI ที่ถูกเรียกให้ทำงานผ่าน SSI ด้วยคำสั่ง exec นี้จะต้องส่งผลการทำงานออกมาเป็น text/html เท่านั้น จะเป็นรูปกราฟฟิกหรือไฟล์รูปแบบอื่นไม่ได้
การเรียกสคริปต์ที่เป็นภาษา Perl
ตัวอย่างต่อไปนี้ เป็นการเรียกสคริปต์
CGI ให้ทำงาน ซึ่งสคริปต์นี้เขียนด้วยภาษา perl ครับ (ใช้นามสกุลเป็นเป็น .cgi ซึ่งคุณอาจจะใช้เป็นนามสกุลอื่นก็ได้เช่น .pl ขึ้นอยู่กับการเซ็ตเว็บเซิร์ฟเวอร์ของคุณครับ) นั่นคือถ้าเราต้องการเขียน CGI สำหรับนับจำนวนครั้งของการเปิดเว็บเพจ หรือที่เรียกว่า เคาน์เตอร์ ให้แสดงตัวเลขออกมาเป็นข้อความ ก็จะได้สคริปต์ counter.cgi ต่อไปนี้

counter.cgi
----------------------------------------------------------------------------------------------------------
#!C:/perl/bin/perl.exe

$filecounter = "/southcat/ssi/counter.dat";
open (FILE, "$filecounter") || die "Error open $filecounter [$!]\n";
$count = <FILE>;
close( FILE);

$count++;
open( FILE, ">$filecounter") || die "Error create file $filecounter [$!]\n";
print FILE $count;
close( FILE);

$count = sprintf("%05d", $count);
print "Content-type:text/html\n\n";
print $count;
---------------------------------------------------------------------------------------------------------

ก่อนที่จะรันสคริปต์นี้ให้ทำงาน ต้องสร้างไฟล์ว่างที่ชื่อว่า counter.dat  ก่อนนะครับ และสามารถดูผลการทำงานของไฟล์ได้ ที่นี่ และเมื่อต้องการเรียกไฟล์นี้ผ่านโค้ด SSI เราก็ต้องสร้างไฟล์ที่สามารถเรียกโค้ด SSI ได้ ดังนี้ครับ

exam4.shtml
-----------------------------------------------------------------------------------
<html>
<head><title>Welcome to My Page</title></head>
<body>
    <center>
    <h2>ยินดีต้อนรับสู่โฮมเพจของเรา</h2>
     คุณเป็นคนเยี่ยมชมลำดับที่ # <!--#exec cgi="/ssi/counter.cgi" -->
    </center>
</body>
</html>
--------------------------------------------------------------------------------------------------------

ดูผลการทำงานของ exam4.shtml ได้ ที่นี่

การเรียกสคริปต์ที่เป็นภาษา
PHP
ตัวอย่างต่อไปนี้ เป็นการเรียกสคริปต์ CGI ที่เขียนด้วยภาษา php (ex_php_script.php) ให้ทำงาน ซึ่งเป็นตัวอย่างของการแสดงค่าของสูตรคูณของเลข 2 และสามารถดูผลการทำงานของไฟล์ ex_php_script.php ได้ ที่นี่

ex_php_script.php
------------------------------------------------------
<?
$a=1;
for ($a=1; $a<13 ; $a++)
  {
    echo "2 x $a = ",2 * $a, "<br>";
  }

?>
------------------------------------------------------

และเมื่อนำไฟล์นี้ไปเรียกใช้งานผ่าน SSI จากไฟล์ exam5.shtml ดังตัวอย่างข้างล่าง ก็จะได้ผลลัพท์ ดังนี้ ครับ

exam5.shtml
---------------------------------------------------------------------------------------------------------
<html>
<head><title>Welcome to My Page</title></head>
<body>
    <center>
    <h2>ยินดีต้อนรับสู่โฮมเพจของเรา</h2>
     สูตรคูณเม่ 2<hr><!--#exec cgi="/ssi/ex_php_script.php" --><hr>
    </center>
</body>
</html>
--------------------------------------------------------------------------------------------------------

การเรียกสคริปต์ที่เป็นภาษา ASP
เรามักไม่เคยเห็นการเรียก ASP Script ผ่าน SSI กันนะครับ และจริง ๆ แล้วก็ไม่รู้เขานิยมใช้กันหรือเปล่า แต่ผมลองทดลองเรียก ASP Script ผ่าน SSI Code จากไฟล์ที่มีสกุลเป็น .sthml ได้เช่นกันครับ

ตัวอย่างต่อไปนี้เป็น ASP Script (testasp.asp) ครับ ซึ่งเป็นตัวอย่าง ASP แบบง่าย ๆ คือเป็นการวนลูปของคำสั่ง for และให้พิมพ์คำว่า "Hello" จำนวน 5 ครั้ง ดูผลการทำงานได้ ที่นี่

testasp.asp
----------------------------------------------------------------------------------------------
<%
response.write "<br>"
for n=1 to 5
response.write("Hello " & n & "<br>")
next
%>
---------------------------------------------------------------------------------------------

เราสามารถเรียกไฟล์นี้ให้ทำงาน ผ่าน SSI code จากไฟล์ exam6.shtml ได้ดังตัวอย่างต่อไปนี้ :

exam6.shtml
--------------------------------------------------------------------------------------------
<html>
<head><title>Welcome to My Page</title></head>
<body>
<center>
<h2>ยินดีต้อนรับสู่โฮมเพจของเรา</h2>
ทดสอบ <hr> <!--#exec cgi="/ssi/testasp.asp" --><hr>
</center>
</body>
</html>
-------------------------------------------------------------------------------------------

ดูผลการรันได้ ที่นี่ จากผลการรันจะเห็นว่ามีข้อความที่ไม่ต้องการเกิดขึ้นด้วย คือข้อความต่อไปนี้ "
HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Fri, 08 Feb 2002 03:14:30 GMT Connection: close Content-Type: text/html" ใครรู้วิธีลบข้อความนี้ออกช่วยบอกด้วยก็แล้วกันนะครับ

การเรียกสคริปต์หลายภาษาจากไฟล์ ๆ เดียว
ไฟล์ที่สามารถใช้ SSI Code ได้ เช่นไฟล์ที่มีนามสกุลเป็น .shtml สามารถจะเรียก CGI script ของหลายภาษาจากไฟล์ ๆ เดียวได้ ตัวอย่างต่อไปนี้ (exam7.shtml) มีการใส่ SSI Code ให้เรียก CGI script ทั้ง 3 ภาษาคือ perl,php และ asp ดูผลการรัน ที่นี่

exam7.shtml
------------------------------------------------------------------------------------------

<html>
<head><title>Welcome to My Page</title></head>
<body>
<center>
<h2>ยินดีต้อนรับสู่โฮมเพจของเรา</h2><hr>
ส่วนนี้เป็นผลจากการเรียกสคริปต์ภาษา Perl<br>
คุณเป็นคนเยี่ยมชมลำดับที่ # <!--#exec cgi="/ssi/counter.cgi" --><hr>
ส่วนนี้เป็นผลจากการเรียกสคริปต์ภาษา php<br>
<!--#exec cgi="/ssi/ex_php_script.php" --><hr>
ส่วนนี้เป็นผลจากการเรียกสคริปต์ภาษา asp<br>
<!--#exec cgi="/ssi/testasp.asp" --><hr>
</center>
</body>
</html>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น