לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #6  
ישן 05-12-2007, 12:16
צלמית המשתמש של fcf
  משתמש זכר fcf fcf אינו מחובר  
 
חבר מתאריך: 17.09.05
הודעות: 6,023
שלח הודעה דרך ICQ אל fcf שלח הודעה דרך MSN אל fcf Facebook profile
בתגובה להודעה מספר 1 שנכתבה על ידי netaneldj שמתחילה ב "איך מערכת vBulletin "סופרת מחוברים"?"

מצאתי באיזה פורום אחר מדריך כיצד לבנות טבלת מחוברים....
מדריך כזה מבזבז גם משאבים ?

שלב ראשון: יצירת המסד. יצירת מסד חדש שנקרא לצורך הדוגמא 'users', בעל שלושה שדות שמוכנסות כטבלה. השדות הללו הם timersite, ip ו- file. השמות של טבלת המחוברים גם כן באותה השורה. עכשיו הטופס יכתב דרך phpMyadmin הוסיפו את הקוד הבא:
קוד:
SQL CREATE TABLE useronline ( timersite int(15) DEFAULT '0' NOT NULL, ip varchar(40) NOT NULL, file varchar(100) NOT NULL, PRIMARY KEY (timersite), KEY ip (ip), KEY file (file) );


וכעת אחרי שהרצתם, הנה הגיע שבו תצטרכו להכניס את הנתונים לתוך קובץ ה- PHP שלכם.

קוד PHP:
<?php
//הכניסו את המידע של המאגר למקומות הנכונים
$server "localhost"//לפעמים זה localhost
$db_user "username"//שם המשתמש למסד הנתונים
$db_pass "password"//סיסמת מסד הנתונים
$database "users";
$timeoutseconds 300;

//this is where PHP gets the time
$timersite time();
$timeout $timersite-$timeoutseconds;

//החברות למאגר הנתונים - הגישה
//$server = localhost
//$db_user = שם המשתמש למסד הנתונים שלכם
//$db_pass = //your MySQL database password
mysql_connect($server$db_user$db_pass);

//הכנסת הערכים
$insert mysql_db_query($database"INSERT INTO useronline VALUES
('
$timersite','$REMOTE_ADDR','$PHP_SELF')");
if(!(
$insert)) {
print 
"ניסיון הכנסת משתמשים פעילים - נכשל > ";
}

//מחיקת הערכים שנשארו
$delete mysql_db_query($database"DELETE FROM useronline WHERE timersite<$timeout");
if(!(
$delete)) {
print 
"פעולת מחיקת משתמשים פעילים נכשלה > ";
}

$result mysql_db_query($database"SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'");
if(!(
$result)) {
print 
"משתמשים פעילים - בחירת שגיאה > ";
}

//מספר שורות = המספר של המשתמשים הפעילים
$user mysql_num_rows($result);


mysql_close();
if(
$user == 1) {
print(
"$user user online\n");
} else {
print(
"$user users online\n");
}
?>


תהנו.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 07-12-2007, 20:45
  GreenBerret GreenBerret אינו מחובר  
 
חבר מתאריך: 13.12.05
הודעות: 1,963
בתגובה להודעה מספר 1 שנכתבה על ידי netaneldj שמתחילה ב "איך מערכת vBulletin "סופרת מחוברים"?"

אתה צודק שדבר כזה יכול לבזבז משאבים למסד הנתונים, תלוי איך אתה מתכנן את מה שנקרא "טבלת" המחוברים.

בטבלת מחוברים מומלץ לדוגמה, לשמור כערכי בסיס, את ה session_id של המשתמש בPHP (הוא צריך להיות ייחודי לכל משתמש) ואת זמן העדכון האחרון, ואם אתה רוצה אתה יכול להוסיף את הID של המשתמש במערכת שלך (במידה וזה משתמש מחובר).
אני ממליץ לך לקרוא את פרק האופטימיזציה, או לפחות חלקים שלו שקשורים לINDEX.

אם אתה מבצע את כל זה נכון, הטבלה לא צריכה להוות בעיה.
כמה טיפים שלי לעבודה עם טבלה כזו:

  1. המפתח הראשי לא צריך להיות מספר רץ, מספיק שהוא יהיה ה session_id מPHP.
    סביר להניח, שאיך שלא תנסה ליצור את זה, session_id בPHP יעבוד יותר טוב ממה שתוכל ליצור אתה לכל משתמש. ועכשיו ליתרון הגדול של זה כמפתח ראשי בעת עדכון הטבלה, כל מה שתצטרך להריץ בכל עמוד, הוא רק שאילתה אחת:
    קוד PHP:
     mysql_query("INSERT LOW_PRIORITY 
        INTO onlines SET id = '"
    .session_id()."', timestamp = UNIX_TIMESTAMP(NOW()), user_id = $user_id 
        ON DUPLICATE KEY UPDATE timestamp = UNIX_TIMESTAMP(NOW()), user_id = 
    $user_id"); 
    הסבר קצר:
    LOW PRIORITY - יגרום לכך שהשאילתה לא תעכב את זמן הטעינה של המשתמש ותחזור מיד כש MySQL ירשום אותה ב buffer בצד.
    ON DUPLICATE KEY UPDATE - יגרום לכך שבעת ה INSERT, במידה וקיים session_id כזה, הוא רק יתעדכן - ויחסוך לך זמן של SELECT לבדיקה אם הוא קיים.
  2. תיצור INDEX למה שצריך, לדוגמה: שדה זמן עדכון, שדה של מספר המזהה משתמש מחובר.
    INDEXים, כמו שתקרא, יגרמו לטבלה לעבוד הרבה יותר מהר.
  3. תגדיר את הטבלה כטבלת MEMORY
    יכול להיות שימליצו לך לא לעשות זאת, אני ממליץ שכן.
    נכון שיש חסרון אחד שכל המידע "אובד" כאשר MySQL כבה או כשהשרת מתאתחל.
    בסך הכל, טבלת המשתמשים המחוברים אינה מעניינת את המערכת הקבועה שמחזיקה את כל שאר המידע, אז המידע שיש בה ממילא לא נחוץ לעוד 3 דקות מכל זמן מוגדר.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:35

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר