Server Side Includes

Server Side Includes (עברית: הכללות צד-שרת; בראשי תיבות: SSI) היא שפה המפורשת על שרת דפי האינטרנט, שנועדה להפיכת דפי HTML סטטיים למעט יותר דינאמיים. מטרתה של SSI אינה להפוך דפי HTML ליישומי צד-שרת מלאים, כמו אלה הנכתבים ב-ASP, ב-PHP ובשפות דומות, אלא לאפשר הכללת מידע דינאמי מהשרת בתוך דפי ה-HTML. לדפי HTML שמוכללים בהם תגי SSI יש בדרך-כלל סיומת shtml או shtm. בשרת IIS נהוגה גם הסיומת stm. SSI הופיעה לראשונה בשרת NCSA HTTPd, שממנו התפתח שרת אפאצ'י. שרת IIS של מיקרוסופט מממש את SSI באופן דומה לזה של NCSA HTTPd על ידי רכיב ISAPI בשם Ssinc.dll. בשרת אפאצ'י קיימות הוראות SSI נוספות על אלו שב-NCSA HTTPd וב-IIS, המכונות "xSSI" על ידי קרן התוכנה אפאצ'י (כשהאות x היא קיצור של extended - הכללות צד שרת מורחבות). הן ממומשות כמודול הרחבה לשרת בשם mod_include. התחביר הכללי עבור הוראות SSI הוא: <!-- # directive parameter1="value" parameter2="value" ... --> הוראות SSI נמצאות בתוך הערות HTML, כך שאם הוראה מסוימת לא תעובד, או שהקובץ לא יפורש על ידי מפרש ה־SSI כלל, לא יפריעו הוראות ה־SSI לתצוגה בדפדפן. כל הוראה מורכבת מהערת HTML, ובתוכה סימן סולמית (#), ומיד לאחריו סוג ההוראה, ואחריה רשימת הפרמטרים של ההוראה הכתובה בדומה לפרמטרים של תגי HTML - שם הפרמטר, סימן שווה, וערכו של הפרמטר. תחביר SSI של שרת זה הוא התחביר הבסיסי, שעליו מתבססים שאר היישומים של SSI. קיימות 6 הוראות SSI בשרת זה: הוראת include – הוראה זו מכלילה את הדף שניתן לה כפרמטר בתוך הדף שבו ההוראה נמצאת. זוהי ההוראה הנפוצה ביותר בשימוש ב-SSI, ועליה בעצם מבוסס שם הטכנולוגיה. ניתן להשתמש בהוראה זו יחד עם אחד משני פרמטרים: virtual – ולספק נתיב וירטואלי לקובץ: <!-- #include virtual="/virtual/path/to/file" --> file – ולספק נתיב יחסי לקובץ שנמצא תחת התיקייה הנוכחית: <!-- #include file="path/to/file" --> הוראת config – הוראה זו יכולה לקבל שלושה פרמטרים: errmsg – קובע הודעת שגיאה שתישלח ללקוח במקרה של כשל בפירוש הוראות הכללות צד-השרת. timefmt – קובע את המבנה ודרך ההצגה של זמנים ותאריכים לשימוש עם הוראות echo ו-flastmode (ראו להלן). sizefmt – קובע את המבנה ודרך ההצגה של גודלי קבצים לשימוש עם הוראות echo ו-fsize (ראו להלן). הוראת echo – הוראה זו מקבלת פרמטר אחד, בשם var, המכיל שם משתנה, ומציגה את ערכו. משתני הסביבה של SSI מפורטים למטה. הוראת fsize – הוראה זו מציגה את גדלו של הקובץ הניתן כפרמטר. גודל הקובץ יוצג בדרך שהוגדרה בהוראת ה-config (ראו למעלה). הפרמטרים זהים לאלו של הוראת include (ראו למעלה). הוראת flastmod – הוראה זו מציגה את תאריך השינוי האחרון של הקובץ הניתן כפרמטר. התאריך יוצג באופן שהוגדר בהוראת ה-config (ראו למעלה). הפרמטרים זהים לאלו של הוראת include (ראו למעלה). הוראת exec – הוראה זו מבצעת פקודת מעטפת פקודה (מדובר על מערכות מבוססות יוניקס) או תוכנית CGI, ומציגה את המידע שמחזירה התוכנית או הפקודה. הפרמטרים האפשריים הם: cmd – במקרה זה תבצע מעטפת-הפקודה /bin/sh את מחרוזת הקלט, ותציג את התוצאה. ניתן להשתמש במשתני הסביבה של SSI בפקודה זו. cgi – פרמטר זה כולל נתיב וירטואלי לתוכנית CGI. במקרה זה התוכנית תבוצע, והקלט שלה יוכלל בדף הנוכחי (בדומה להוראת include). המשתנים שניתן להשתמש בהם בהוראות השונות הם משתני הסביבה של CGI (כגון, SERVER_NAME, QUERY_STRING, REMOTE_ADDR וכו'), ומספר משתנים נוספים, הכוללים את שם הקובץ הנוכחי (DOCUMENT_NAME), התאריך המקומי של השרת, ועוד. מימוש SSI של שרת IIS כולל את אותן 6 הוראות של שרת NCSA HTTPd, והתאימות כמעט מוחלטת. גם רשימת משתני הסביבה כמעט זהה. בשרת IIS, הוראת exec יכולה לבצע גם דפי ASP ויישומי ISAPI, ולא רק יישומי CGI בעזרת הפרמטר cgi. הוראת include ניתנת לשימוש גם בדפי ASP. למרות שטכנית מפרש ASP מבצע את ההכללה, ולא מנוע SSI, הדבר קשור בקשר הדוק ל־SSI, ומצוין בתיעוד שלה. הוראות SSI אחרות אינן פועלות בדפי ASP. שרת אפאצ'י, גם הוא תומך בכל ההוראות הבסיסיות של שרת NCSA HTTPd, אך מרחיב אותן במספר אופנים, והופך את הגרסה שלו להכללות צד-השרת דומה יותר לשפת תכנות, ולא רק לכלי להכללת מידע (דפים אחרים או ערכי מאפיינים) בתוך דף נתון. ניתן לחלק את ההרחבות של שרת אפאצ'י לשניים: שיפורים ותוספות בהוראות קיימות, והוראות חדשות. להלן פירוט: תוספות להוראות קיימות להוראת config ניתן להוסיף גם פרמטר בשם echomsg שמגדיר הודעה שתוצג ללקוח במקרה של ניסיון להציג משתנה שאינו קיים בעזרת הוראת echo. שימוש בפרמטר virtual של הוראת include מאפשר הכללת תסריטי CGI עם פרמטרים, ולא רק דפי HTML. הוראות חדשות שרת אפאצ'י מוסיף 6 הוראות חדשות על אלה שירש משרת NCSA HTTPd: הוראת printenv, הוראת set, והוראות if. הוראות printenv מדפיסה את כל המשתנים המוגדרים ואת ערכיהם. אין היא מקבלת פרמטרים. הוראת set מקבלת שני פרמטרים: var ו-value וקובעת את ערכו של המשתנה ששמו מוגדר ב-var לערך הכתוב ב-value. כלומר, השורה הבאה תקבע את ערכו של המשתנה name לערך joey. <!-- #set var="name" value="joey" --> הוראות if אלו הן 4 הוראות שמשמשות יחד ליצירת מבני תנאי. הוראת if פותחת תנאי, הוראות elif מגדירות מקרים נוספים מעבר לתנאי הראשוני, הוראת else מגדירה מקרה שבו אף-אחד מהתנאים לא התקיים, והוראות endif סוגרת את מבנה התנאי. לדוגמה: <!-- #if expr='"$DOCUMENT_URI" = "/foo.shtml"' --> file is foo.shtml <!-- #elif expr='"$DOCUMENT_URI" = "/bar.shtml"' --> file is bar.shtml <!-- #elif expr='"$DOCUMENT_URI" = "/moo.shtml"' --> file is moo.shtml <!-- #else --> I don't know which file is this <!-- #endif --> קטע הקוד דלעיל יציג הודעה שונה בהתאם לשם הקובץ בו יושם. תיעוד עבור SSI בשרת NCSA HTTPd - באנגלית תיעוד עבור שרת IIS SSI עבור IIS 6.0 - באתר MSDN עבור שרת אפאצ'י 2.4: מדריך היכרות עם SSI • המודול mod_include