קבצי HTML סטנדרטיים מצוינים לאחסון דפים, אך יש תועלת ביכולת ליצור חלק מהתוכן באופן דינמי. למשל - להוסיף כותרת עליונה או תחתונה לכל הקבצים או להכניס מידע הקשור למסמך כגון תאריך העדכון האחרון, באופן אוטומטי.
ניתן לעשות זאת בעזרת CGI, אך זה מורכב ומחייב מיומנויות בתכנות וב- scripting.
קיימת חלופה עבור מסמכים דינמיים פשוטים: תוספות בצד השרת - SSI.
SSI מאפשר לך לשבץ מספר פקודות מיוחדות אל תוך קובץ ה - HTML עצמו. כשהשרת קורא מסמך SSI, הוא מחפש פקודות אלה ומבצע את הפעולה הנדרשת. למשל, קיימת פקודת SSI שמכניסה את תאריך העדכון האחרון של המסמך. כשהשרת קורא קובץ הכולל פקודה זו, הוא מחליף את הפקודה בזמן המתאים.
אפאצ'י מכילה קבוצת פקודות SSI , על בסיס אלו המצויות בשרת NCSA וכן עוד כמה הרחבות.
8.2 כיצד להורות לאפאצ'י להשתמש ב- SSI?
בברירת המחדל, השרת אינו טורח לחפש פקודות SSI בקבצי HTML - זה היה מאט כל גישה לקובץ HTML. כדי להשתמש ב- SSI, עליך לומר לאפאצ'י איזה מסמכים כוללים פקודות SSI.
דרך אחת לעשות זאת היא להשתמש בסיומת קבצים מיוחדת. לרוב משתמשים ב- shtml. ניתן לעצב זאת בעזרת הפקודה הבאה:
AddHandler server-parsed .shtml
AddType text/html shtml
פקודת AddHandler מורה לאפאצ'י להתייחס לכל קובץ shtml. כקובץ העשוי לכלול פקודות SSI.
פקודת AddType גורמת לכך שהתוכן הנוצר מסומן כ- HTML כדי שהדפדפן יוכל להציגו בצורה מתאימה.
דרך חלופית היא להשתמש ב- XbitHack ע"י קביעת ה- executive bit בקבצי HTML.
כל קובץ בעל סוג תוכן text/html (דהיינו, סיומת של html.) ובעל executive bit קבוע ייבדק לאיתור פקודות SSI. מפעילים זאת ע"י פקודת XbitHack.
בשתי השיטות חייבים להגדיר בקונפיגורציה של השרת כי ניתן לאפשר תוספות SSI.
את זאת עושים בעזרת פקודת Options Includes, אותה יש למקם ב - access.conf הגלובלי או ב- htaccess. המקומי (באפשרות השניה, חייבים קודם לאפשר זאת ע"י
AllowOverride Options).
כיוון שחלק מפקודות SSI מאפשרות למשתמש להריץ תוכניות - דבר העלול להוות סיכון בטיחותי, קיימת אופציה אחרת, IncludesNOExec, המאפשרת הרצת פקודות SSI אך לא מאפשרת הרצת הפקודות העשויות להריץ תוכניות.
כל קבצי SSI מאוחסנים בתוך ה - HTML בהערות HTML.
פקודת SSI אופיינית תיראה כך:
<--"flastmod file="this.html #--!>.
במקרה זה, הפקודה היא flastmod. פירוש הפקודה הוא שהפלט הוא תאריך העדכון האחרון של הקובץ הנתון. הארגומנטים בדוגמא כוללים את הקובץ "this.html" (שיכול להיות שם הקובץ המכיל את הפקודה).
כל הטקסט של הפקודה, כולל הסמנים של ההערות, --!> ו- <-- יוחלפו בתוצאה של הפקודה.
באופן כללי, כל הפקודות הן מהפורמט הבא:
<-- ..."command arg1="value1" arg2="value2 #--!>
arg1 ו - arg2 הם השמות של הארגומנטים ו- value1, value2 הם הערכים של ארגומנטים אלו. בדוגמא
הקודמת ( flastmod ), הארגומנט הוא 'file' וערכו הוא 'this.html'.
בדר"כ פקודות יכולות לקבל שמות ארגומנטים שונים.
למשל, פקודת flastmod יכולה לקבל כתובת URL בעל ארגומנט בשם: virtual, כדי לקבל את תאריך העדכון האחרון מהשרת.
הפקודה תראה כך :<--"/"=flastmod virtual #--!> , ונקבל את זמן העדכון האחרון של עמוד הבית על השרת (זה שימושי אם לעמוד אליו רוצים לגשת יש שם קובץ שונה).
חוץ מ - flastmod יש פקודות SSI אשר נותנות כפלט את גודל הקובץ או ה - URL, תוכן של משתנה (שעובר בשרת), תוכן של קובץ או URL אחר, או תוצאות הרצת קובץ מקומי.
כל הפקודות מפורטות ב -
NCSA tutorial
כאשר מתבצעות פקודות SSI, מוגדרים מספר משתני סביבה. אלה כוללים משתני CGI
(REMOTE_HOST וכו' ) ועוד, כגון DOCUMENT_NAME ו- LAST_MODIFIED. אפשר להדפיס אותם בעזרת פקודת ה- echo (ולכן, דרך טובה יותר לקבל את זמן העדכון האחרון של הקובץ ההנוכחי תהיה: ).
אפאצ'י מרחיבה את שפת SSI הסטנדרטית במידה משמעותית. חלק מההרחבות כוללות:
1. משתנים בפקודות - אפאצ'י מאפשרת שימוש במשתנים בכל פקודות SSI.
למשל כדי לקבל את זמן העדכון האחרון של המסמך הנוכחי נבצע:
<--"flastmod file="$DOCUMENT_NAME #--!> .
2. הגדרת משתנים - ניתן להשתמש בפקודת set בתוך ה- SSI כדי להגדיר משתנים.
3. משפטי התניה - ניתן להשתמש בפקודות :SSI if, else, elif, endif כדי לכלול חלקים
של הקובץ על סמך בדיקות. למשל, ניתן לבדוק את המשתנה
HTTP_USER_AGENT$ כדי לראות את סוג הדפדפן וקודים שונים של פלט HTML,
התלויים ביכולותיו של הדפדפן.
להלן כמה דוגמאות של שימוש ב- SSI:
הצגת מידע על מסמכים:
הקוד הבא מציג את זמן עדכון המסמך על העמוד: