xhtml ssi מפת האתר דף ראשי

«
«
«
«
«
«
ראשי  » אפאצ'י  »  השימוש ב- ssi

מאמר 4: הגיע הזמן לתוספות בצד השרת / סוון היניקה

4.1 הקדמה

שאלה: אני רוצה להכניס את התאריך והשעה המעודכנים בעמוד הבית שלי.
האם קיים CGI script, או משהו אחר, אשר "יתפוס" מידע זה ויציגו בעמוד שלי בכל פעם שמישהו נכנס לעמוד?

תשובה: כיון שהזכרת את CGI כפתרון אפשרי, אני מניח שהיית רוצה להציג את הזמן המתועד בשרת (כדי להציג זמן מחשב מקומי, תוכל להשתמש ב- java או JavaScript - אך לא ארחיב בעניין זה כאן).
אם השרת שלך תומך בתוספות שרת ( SSI ) מסוג NCSA-HTTPd, תוכל לעשות זאת בקלות ללא CGI. פשוט תוודא שה- webmaster מאפשר SSI ותכתוב שורה כגון:
<!--#echo var="DATE_LOCAL"-->
אשר יוציא כפלט:
Wednesday, 29-Oct-97 19:37:44 PST

 

4.2 השימוש ב-SSI

התווים - -!> ו- < - - מקיפים הערות HTML אשר אינן מוצגות על העמוד.
לפני ששרת HTTP שולח עמוד, הוא מבצע בו סריקה כדי לחפש הערות שמתחילות בסימן #. כשהוא מאתר הערה כזו, הוא בודק את הפקודה אחרי הסימן הזה (במקרה זה, פקודת echo) ומבצע פעולה, בהתאם לארגומנטים המופיעים
("var="DATA_LOCAL). אם אתה מעוניין במידע נוסף על תקני פירמוט , יש תיאור מלא ב- NCSA.

חזרה לדוגמא שלנו - בעיני זה פתרון משעמם. הוא פועל, זה נכון, אבל הוא נראה כמו פורמט שמופיע בשדה header ב- HTTPd. ע"כ נשנה אותו ע"י הוספת שורה, כגון:
<!--#config timefmt="%A, %B %d, %Y"-->
ואז התוצאה היא:
Wednesday, October 29, 1997 
בדוגמא זו, A % מוחלף ביום בשבוע, B % מוחלף בחודש, d % מוחלף ביום בחודש, Y % מוחלף בשנה. רשימת החלפות אפשריות בד"כ מוצגת בעמוד Unix המרכזי ב- data או time.
להלן רשימה קצרה של כמה מהדברים הסטנדרטיים וערכיהם - אך יתכן שמערכות הפעלה שונות יציעו קבוצות קצת שונות:

%%   %  
%a (Wednesday - קיצור ל) Wed  היום בשבוע בקיצור
%AWednesday   השם המלא של היום בשבוע
%w3   מספר היום בשבוע, יום ראשון הוא 0 ( 0-6 )
%b Oct  שם החודש בקיצור
%BOctober  השם המלא של החודש
%d29  היום בחודש ( 01-31 )
%e29   היום בחודש ( 1-31 )
%H19  השעה ביום ( 00-23 )
%I 07 השעה ביום ( 01-12 )
%j302 היום בשנה ( 001-366 )
%M37  דקה ( 00-59 )
%p PM  AM או PM
%S44  שניה (00-61 )
%y97 שתי הספרות האחרונות של השנה ( 00-99 )
%Y1997 השנה
%ZPST זמן אזורי

אם תטעין קטע זה מספר פעמים, תראה איך השניות משתנות.

אבל, אינך חייב להגביל את עצמך לדברים שטותיים כגון % בפורמט שלך. גם HTML יפעל ! יש לי כמה קבצי GIF , הקרואים לפי ימות השבוע.
אם תגדיר את שורת ה- config:
<!--#config timefmt="
<img align=center src=/webmonkey/geektalk/96/38/stuff/%A.gif>"-->
ותכלול שוב שורה זו:
<!--#echo var="DATE_LOCAL"-->
תקבל את אותו הדבר.

 

4.3 סקריפט ( script ) של CGI

כל זה בסדר גמור, אך כאן נכנס קצת תסכול לעניין. לפי תקני HTML, השורה הקודמת צריכה לכלול זוג סימני גרשיים נוסף מסביב ל- stuff/%A.gif ,כך:
<!--#config timefmt="<img align=center src="stuff/%A.gif">"-->
אבל זה יוצר בלבול רב כי קשה להבחין מהם הגרשיים הסופיים. אני גם לא אוהב להכניס אותיות קטנות וגדולות בתוך ה- URL שלי ולכן כתבתי CGI script קצר ב- Perl כדי לפתור בעיה זו:
#!/usr/local/bin/perl -Tw
#
# Does this script not work with your
# Perl?  Make sure you're using Perl5:
# http://zen.org/~sven/geek/perl5p.html
use strict;
# First let's find out what time it is.
my @time = localtime(time);
# Then let's pull the day we care about.
my $day = ("Sunday", "Monday", "Tuesday",
           "Wednesday", "Thursday",
           "Friday", "Saturday")[$time[6]];
# Tell the world we are sending a GIF
# created using at least one
# patented algorithm.
print "Content-type: image/gif\r\n\r\n";
# load the GIF and print it out.
if (open(GIF, "./$day.gif")) {
    while (<GIF>) {
        print;
    }
}
close(GIF);
exit 0;
הוא בודק את היום, מוצא את ה- GIF הנכון ושולח אותו ל- HTTP. כל מה שאתה חייב לעשות הוא להשתמש ב- script כאילו היה תמונה, כך:
<img align=center src="/webmonkey/geektalk/96/38/stuff/day.cgi">
וזה ייראה כך: