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

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



  #1  
ישן 09-11-2010, 17:55
  אלון סאקס הגבר אלון סאקס הגבר אינו מחובר  
 
חבר מתאריך: 19.02.05
הודעות: 114
שלח הודעה דרך ICQ אל אלון סאקס הגבר
PHP| העברת קובץ לתיקייה זמנית למטרת הורדה

אהלן,
אחלה פורום של מקצוענים יש פה

אני עובד על מערכת העלאת קבצים
עכשיו אני רוצה לעשות שמתי שמישהו מקבל קישור זה יהיה תקף רק לו [לפי IP COOKIE וזמן מוגדר]
שמישהו מעלה קובץ זה נכנס לתיקייה עם שם כזה jhfs78fs8ys089-u0s98dfs9fusf9gf9ig9-u9s
והשם של הקובץ הופך למשהו כזה
82572380fjiewufy7yfg863r5tyrh-0r-032ri09ru8yr7.msfiles
עכשיו אני שומר במסד את השם המקורי ונותן מזהה אישי, ואז שמישהו ניגש להורדה לפי מזהה
משהו כזה
index.php?id=h37r3hf87f
הוא מעתיק את הקובץ לתיקייה downloads פותח תיקייה חדשה עם שם רנדומלי [למניעת התנגשות בין שני הורדות אותו דבר]
ובפנים שם את הקובץ עם השם המקורי
דוחף את הקובץ עם Header
השאלה איך אני יודע שהמשתמש סיים להוריד בשביל למחוק את התיקייה הזמנית,
או אולי יש מצב לפתוח תיקיית TMP שתימחק לבד?
תודה רבה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 09-11-2010, 20:31
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 1 שנכתבה על ידי אלון סאקס הגבר שמתחילה ב "PHP| העברת קובץ לתיקייה זמנית למטרת הורדה"

נראה לי רעיון רע.
לכל הורדה אתה רוצה להעתיק את הקובץ למקום פיזי אחר בהארד-דיסק, לקבצים גדולים רק ההעברה יכולה לקחת חצי דקה (ויותר, תלוי כמה גדולים) וזה כשרק מישהו אחד מוריד קובץ.
אם אתה מתעקש על פתרון מבוסס מערכת קבצים, תקרא על Symbolic Linkֿ, אבל גם זה, פתרון עקום.

הכי פשוט זה לעשות ככה:
את כל ההעלאות אתה שם בתיקייה שלא ניתן להגיע אליה דרך http, ב- apache אני חושב שעושים את זה על ידי יצירת קובץ .htaccess שתוכנו:
קוד:
Order Deny,Allow Deny from all

אבל אני לא בטוח כמה זה מדויק

אחר כך תעשה טבלה של הורדות שאפשר לבצע כרגע, נקרא לה download_tickets
במימוש הכי פשוט יהיה לטבלה 3 עמודות: id, requestTime,fileId ו- ipAddress
id זה מחרוזת זיהוי ל-"כרטיס"
requestTime זה הזמן שבו "ביקשו" את הכרטיס, מה שחשוב זה שהשדה לא יכיל רק שעה, אלה גם תאריך, שלא יעבור יום ואז פתאום הכרטיס יהיה תקין
בהנחה שאתה רושם במסד נתונים את הקבצים שמועלים לאתר, fileId זה ה- id של הרשומה של הקובץ שהמשתמש רוצה להוריד, צריך את זה בשביל שאחר כך יהיה אפשר להוציא מהבקשה את הנתיב של הקובץ
ו- ipAddress זה הכתובת ip...

כמשתמש רוצה להוריד משהו אתה מקשר אותו לקובץ עם פרמטר של הבקשה, הוא מוודא שהבקשה קיימת ואם היא קיימת שהיא עדיין תקפה, אם כן הוא מוציא את הנתיב של הקובץ ושולח אותו להורדה

רצוי גם להריץ עם cron כל כמה זמן סקריפט שמנקה את כל הבקשות שפגו תוקף
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 10-11-2010, 19:18
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי אלון סאקס הגבר שמתחילה ב "PHP| העברת קובץ לתיקייה זמנית למטרת הורדה"

למה הסתבכת..?

לדעתי:
* אין צורך בנתינת שמות מסובכים ומיוחדים לקבצים. מספיק למספר אותם: 1,2,3,4 ... כדאי שתקרא כיצד מומלץ לסדר את הקבצים המועלים ע"י משתמשי האתר.
* תבצע הורדה בצורה הכי פשוטה שאפשר, מבלי ליצור תיקיות במיוחד בשביל זה, ולפני אישור ההורדה תבדוק שהמשתמש מתאים לקריטריונים.
* כמו שנדב כתב, תוכל לאסור על משתמש גישה ישירה לתיקייה בעזרת, לדוגמא, ההנחיות הבאות:
קוד:
<Directory /folderName> # Forbid overriding directives via .htaccess files (as default value) AllowOverride None # Forbid access to all folders in the filesystem # Source: http://httpd.apache.org/docs/curren...tectserverfiles Order Deny,Allow Deny from all # Disable risky features like CGI scripts execution, displaying directory index, SSI etc. Options None </Directory>


דבר אחרון, זה לא קשור ל-php, שימו לב בבקשה..

נערך לאחרונה ע"י dorM בתאריך 10-11-2010 בשעה 19:20.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 28-11-2010, 23:11
  idan1915 idan1915 אינו מחובר  
 
חבר מתאריך: 27.11.10
הודעות: 34
בתגובה להודעה מספר 1 שנכתבה על ידי אלון סאקס הגבר שמתחילה ב "PHP| העברת קובץ לתיקייה זמנית למטרת הורדה"

ההצעה שלי די מרכזת את מה שנאמר כבר בדיון.

לדעתי השלבים שאתה צריך הם:

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

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

*שים לב שאמרתי לך בהעלאת הקובץ לשמור את סוגו (MIME TYPE)
מאד מומלץ (זה אפילו בגדר חובה) לפני הפליטה לשלוח הדר עם סוג הקובץ.


בהצלחה
_____________________________________
עידן


מתכנת בסביבת הWEB בעיקר

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.05 שניות עם 10 שאילתות

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

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