קובץ הנתונים ב-PHP
הסרטון ב-Flash מעלה מידע מקובץ נתונים, שאותו נכתוב ב-PHP. הסקריפט בקובץ הנתונים יעשה 2 פעולות: יעדכן את מספר המשתמשים אונליין, ויוציא פלט שישמש קלט נתונים ל-Flash. לקובץ הנתונים ב-PHP נקרא usr_online.php.
כדי לספור את המשתמשים המחוברים אונליין לאתר ובכדי להבחין ביניהם, נשתמש בבסיס נתונים ובטבלה שבה נשמור את כתובת ה-IP של המשתמש ואת הזמן האחרון בו המשתמש עדכן את האתר על הימצאו מחובר אליו. את הטבלה נגדיר כך (נקרא לה users_online):
שדה |
הגדרה |
תיאור |
ip |
varchar(15) not null default '127.0.0.1' PRIMARY |
כתובת ה-IP הייחודית של המשתמש. |
timeout |
int(11) not null |
זמן העדכון האחרון (בפורמט של unix timestamp). |
בכל פעם כאשר סרטון ה-Flash של המשתמש מעלה מידע מקובץ הנתונים ב-PHP, אנו נעדכן את טבלת המשתמשים אונליין. את פרק הזמן (בשניות) בו המשתמש ייחשב כאונליין, נשמור במשתנה הגלובלי $conf_expire_timeout
(רצוי שערכו יהיה קצת יותר גדול מפרק הזמן שסרטון ה-Flash מתעדכן). כדי לעדכן את טבלת המשתמשים אונליין, אנו נפעיל 2 שאילתות על בסיס הנתונים:
- שאילתא אחת למחיקת כל השורות בטבלה בהם תוקף המשתמש עבר (כאשר ההפרש בין הזמן הנוכחי לבין זמן העדכון האחרון עולה על פרק הזמן של
$conf_expire_timeout
). בנוסף נמחוק גם את השורה שבה מופיע המשתמש הנוכחי שמתעדכן. - שאילתא שניה מכניסה מחדש לטבלה את כתובת ה-IP של המשתמש הנוכחי ואת הזמן העכשווי (וכך בעצם מעדכנים את האתר ו-"מיידעים" אותו שהמשתמש עדיין מחובר).
file name: usr_online.php
<?php /* Configuration Variables: */ $conf_expire_timeout=125;/* | משתנה המגדיר את פרק הזמן (בשניות) בו משתמש ייחשב כאונליין לאחר שהתעדכן בפעם האחרונה. אם סרטון ה-Flash מתעדכן כל 120 שניות, אז נקבע את פרק הזמן הזה ל-125 שניות. | */ |
$conf_mysql_server=
"localhost";
$conf_mysql_user=
"";
$conf_mysql_pass=
"";
$conf_mysql_db=
"your_db";
header("Cache-Control: no-store, no-cache, must-revalidate");/* | שולח header ללקוח (client) שלא ישמור את הדף הזה בזיכרון המטמון (cache), כך שהסקריפט ירוץ כל עדכון מההתחלה ולא יועלה מן ה-cache. | */ |
$my_ip=$_SERVER["REMOTE_ADDR"];/* | מקבל את כתובת ה-IP של המשתמש. | */ |
$cur_time=time();/* | מקבל את הזמן העכשווי (בפורמט של Unix Timestamp). | */ |
//connects (with persistent link) to MySQL Server and DB:
$sql=@
mysql_pconnect(
$conf_mysql_server,
$conf_mysql_user,
$conf_mysql_pass)
or die(
"&usr_online=err");
@
mysql_select_db(
$conf_mysql_db)
or die(
"&usr_online=err");
//deletes all the expired IP clients and the current IP client:/* | הרצת השאילתא הראשונה למחיקת כל המשתמשים שפג תוקפם, ומחיקת המשתמש הנוכחי שמתעדכן. | */ |
$res=@
mysql_query(
"DELETE FROM users_online WHERE (('$cur_time'-timeout>'$conf_expire_timeout')/* | בדיקת תוקף: ההפרש בין הזמן הנוכחי לבין זמן העדכון האחרון. | */ |
OR (ip='$my_ip')/* | בדיקה של המשתמש הנוכחי. | */ |
)",
$sql)
or die (
"&usr_online=err");
//inserts (updates) the current IP client:/* | הרצת השאילתא השניה להכנסת המשתמש הנוכחי מחדש לטבלה. | */ |
$res=@
mysql_query(
"INSERT INTO users_online (ip,timeout) VALUES ('$my_ip'/* | כתובת ה-IP של המשתמש הנוכחי שמתעדכן. | */ |
,'$cur_time'/* | הזמן העכשווי (בפורמט של Unix Timestamp). | */ |
)",
$sql)
or die(
"&usr_online=err");
if (mysql_affected_rows()!=1)/* | אם נתוני המשתמש הנוכחי שמתעדכן לא נקלטו, אז מסיימים בשגיאה. | */ |
exit(
"&usr_online=err");
?>
Flash יודעת לקרוא נתונים ממקורות חיצוניים בפורמט מסויים, ליתר דיוק בפורמט דומה לזה של העברת משתנים דרך ה-URL (כמו בדרך בה PHP מקבלת נתונים במתודת GET). המשתנים מופרדים ע"י הסימן &
, כך שקודם מופיע שם המשתנה, אחריו הסימן =
ואחריו ערכו של המשתנה (לפעמים כדאי להשתמש בפונקציה urlencode() כדי להתאים את המחרוזות לפורמט שהזכרנו). לא חייב להתחיל את פלט הנתונים עם הסימן &
אך זה גם לא מזיק, ואני מעדיף להתחיל עם הסימן.
לאחר עדכון טבלת המשתמשים אונליין, כל שנותר לעשות הוא לספור את המשתמשים המחוברים כרגע לאתר, ולהוציא פלט נתונים ל-Flash. שמו של הנתון שנוציא יהיה usr_online
(בהמשך תראו כיצד שמו של הנתון משתלב עם Flash).
file name: usr_online.php (continue)
<?php //selects the number of users online:/* | הרצת שאילתא לספירת המשתמשים אונליין באתר. | */ |
$res=@
mysql_query(
"SELECT COUNT(*)/* | מחזיר את מספר השורות המבוקשות. | */ |
FROM users_online",
$sql)
or die(
"&usr_online=err");
$row=
mysql_fetch_row(
$res);
echo "&usr_online=".$row[0]/* | פלט הסקריפט ב-PHP שמשמש קלט נתונים ל-Flash. בפורמט הבא: &usr_online=17 | */ |
;
?>
שים לב שכאשר יש שגיאה בזמן הריצה של הסקריפט, התוכנית ב-PHP מסתיימת ומוציאה כפלט את המחרוזת "&usr_online=err". ערך הנתון בפלט אינו מייצג מספר, אלא 3 האותיות err מסמלות כי ארעה שגיאה. חשוב למנוע הדפסת שגיאות של PHP לפלט כדי שהפלט יהיה בפורמט הנכון עבור Flash.
איך אני בונה מסד?? | 07-12-06 05:01 אלון פ-ר | #2694 |
| איך אני בונה מסד נתונים??
באקסס |
|