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
התחביר הכללי עבור הוראות SSI הוא:

```html

```


הוראות SSI נמצאות בתוך הערות HTML, כך שאם הוראה מסוימת לא תעובד, או שהקובץ לא יפורש על ידי מפרש ה־SSI כלל, לא יפריעו הוראות ה־SSI לתצוגה בדפדפן.
כל הוראה מורכבת מהערת HTML, ובתוכה סימן סולמית (#), ומיד לאחריו סוג ההוראה, ואחריה רשימת הפרמטרים של ההוראה הכתובה בדומה לפרמטרים של תגי HTML - שם הפרמטר, סימן שווה, וערכו של הפרמטר.

### שרת NCSA HTTPd
תחביר SSI של שרת זה הוא התחביר הבסיסי, שעליו מתבססים שאר היישומים של SSI.

#### הוראות ה-SSI
קיימות 6 הוראות SSI בשרת זה:
* **הוראת include** – הוראה זו מכלילה את הדף שניתן לה כפרמטר בתוך הדף שבו ההוראה נמצאת. זוהי ההוראה הנפוצה ביותר בשימוש ב-SSI, ועליה בעצם מבוסס שם הטכנולוגיה.ניתן להשתמש בהוראה זו יחד עם אחד משני פרמטרים:
** **virtual** – ולספק נתיב וירטואלי לקובץ:
```html

```

** **file** – ולספק נתיב יחסי לקובץ שנמצא תחת התיקייה הנוכחית:
```html

```

* **הוראת 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).

#### משתני הסביבה של SSI
המשתנים שניתן להשתמש בהם בהוראות השונות הם משתני הסביבה של CGI (כגון, SERVER_NAME, QUERY_STRING, REMOTE_ADDR וכו'), ומספר משתנים נוספים, הכוללים את שם הקובץ הנוכחי (DOCUMENT_NAME), התאריך המקומי של השרת, ועוד.

### שרת IIS
מימוש 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.
```html

```

** **הוראות if**אלו הן 4 הוראות שמשמשות יחד ליצירת מבני תנאי. **הוראת if** פותחת תנאי, **הוראות elif** מגדירות מקרים נוספים מעבר לתנאי הראשוני, **הוראת else** מגדירה מקרה שבו אף-אחד מהתנאים לא התקיים, ו**הוראות endif** סוגרת את מבנה התנאי. לדוגמה:
```html
file is foo.shtml

file is bar.shtml

file is moo.shtml

I don't know which file is this
```


קטע הקוד דלעיל יציג הודעה שונה בהתאם לשם הקובץ בו יושם.

## קישורים חיצוניים
* תיעוד עבור SSI בשרת NCSA HTTPd - באנגלית
* תיעוד עבור שרת IIS SSI עבור IIS 6.0 - באתר MSDN
* עבור שרת אפאצ'י 2.4: מדריך היכרות עם SSI • המודול mod_include

קטגוריה:טכנולוגיות צד-שרת