מאמר 4: הגיע הזמן לתוספות בצד השרת / סוון היניקה
שאלה: אני רוצה להכניס את התאריך והשעה המעודכנים בעמוד הבית שלי.
האם קיים CGI script, או משהו אחר, אשר "יתפוס" מידע זה ויציגו בעמוד שלי בכל פעם שמישהו נכנס לעמוד?
תשובה: כיון שהזכרת את CGI כפתרון אפשרי, אני מניח שהיית רוצה להציג את הזמן המתועד בשרת (כדי להציג זמן מחשב מקומי, תוכל להשתמש ב- java או JavaScript - אך לא ארחיב בעניין זה כאן).
אם השרת שלך תומך בתוספות שרת ( SSI ) מסוג NCSA-HTTPd, תוכל לעשות זאת בקלות ללא CGI. פשוט תוודא שה- webmaster מאפשר SSI ותכתוב שורה כגון:
|
<!--#echo var="DATE_LOCAL"-->
|
|
אשר יוציא כפלט:
|
Wednesday, 29-Oct-97 19:37:44 PST
|
|
התווים - -!> ו- < - - מקיפים הערות 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 | היום בשבוע בקיצור |
%A | Wednesday | השם המלא של היום בשבוע |
%w | 3 | מספר היום בשבוע, יום ראשון הוא 0 ( 0-6 ) |
%b | Oct | שם החודש בקיצור |
%B | October | השם המלא של החודש |
%d | 29 | היום בחודש ( 01-31 ) |
%e | 29 | היום בחודש ( 1-31 ) |
%H | 19 | השעה ביום ( 00-23 ) |
%I | 07 | השעה ביום ( 01-12 ) |
%j | 302 | היום בשנה ( 001-366 ) |
%M | 37 | דקה ( 00-59 ) |
%p | PM | AM או PM |
%S | 44 | שניה (00-61 ) |
%y | 97 | שתי הספרות האחרונות של השנה ( 00-99 ) |
%Y | 1997 | השנה |
%Z | PST | זמן אזורי |
אם תטעין קטע זה מספר פעמים, תראה איך השניות משתנות.
אבל, אינך חייב להגביל את עצמך לדברים שטותיים כגון % בפורמט שלך. גם 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">
|
|
וזה ייראה כך:
|
|