הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 07-11-08, 11:40   # 1
Ron | CSite.co.il
חבר על
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
גיל: 33
הודעות: 980

Ron | CSite.co.il לא מחובר  

php | הורדת קובץ

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

הקוד:

PHP קוד:
    // fix for IE catching or PHP bug issue
    
header("Pragma: public");
    
header("Expires: 0"); // set expiration time
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
// force download dialog
    
header("Content-Type: application/force-download");
    
header("Content-Type: application/octet-stream");
    
header("Content-Type: application/download");    
    
// use the Content-Disposition header to supply a recommended filename and
    // force the browser to display the save dialog.
    
header("Content-Disposition: attachment; filename=".basename($download_file).";");
    
header("Content-Transfer-Encoding: binary");
    
header("Content-Length: ".filesize($local_file));    

  
    
// open file stream
    
$file fopen($local_file"r");    
    while(!
feof($file)) {
        
// send the current file part to the browser
        
print fread($fileround($download_rate 1024));    
 
        
// flush the content to the browser
        
flush();
 
        
// sleep one second
        
sleep(1);    
    } 
לפי מה שבדקתי,
הבעיה היא שהקובץ עובר על הלולאה ורק אז מציג את חלון ההורדה (אחרי שהוא מסיים לעבור על כל הלולאה).

תודה רבה.
  Reply With Quote
ישן 07-11-08, 12:48   # 2
SniR-S
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Aug 2008
הודעות: 546

SniR-S לא מחובר  

נכון לעכשיו אני לומד PHP ואני בדיוק בשלב של הלולאות אם הבנתי נכון מהספר
בשביל לעשות את מה שאתה רוצה תצטרך להשתמש בלולאה do while.
שמה שהיא עושה בעצם זה בצע כל עוד..היא שונה מלולאת ה while בזה שהתנאי
שלה נבדק אחרי כל מעבר על הלולאה.

אז אם הבנתי נכון, אני חושב שזה מה שתצטרך לעשות,
PHP קוד:
    // fix for IE catching or PHP bug issue
    
header("Pragma: public");
    
header("Expires: 0"); // set expiration time
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
// force download dialog
    
header("Content-Type: application/force-download");
    
header("Content-Type: application/octet-stream");
    
header("Content-Type: application/download");    
    
// use the Content-Disposition header to supply a recommended filename and
    // force the browser to display the save dialog.
    
header("Content-Disposition: attachment; filename=".basename($download_file).";");
    
header("Content-Transfer-Encoding: binary");
    
header("Content-Length: ".filesize($local_file));    

  
    
// open file stream
    
$file fopen($local_file"r");    
    do {
        
// send the current file part to the browser
        
print fread($fileround($download_rate 1024));    
 
        
// flush the content to the browser
        
flush();
 
        
// sleep one second
        
sleep(1);    
    }  while(!
feof($file)); 
אני מאוד מקווה שזה נכון ואני צודק (:
  Reply With Quote
ישן 07-11-08, 13:32   # 3
Ron | CSite.co.il
חבר על
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
גיל: 33
הודעות: 980

Ron | CSite.co.il לא מחובר  

תודה רבה על הניסיון לעזור,
אך כמובן שזה לא יפתור את הבעיה.
  Reply With Quote
ישן 07-11-08, 13:34   # 4
Shon12
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 354

Shon12 לא מחובר  

ציטוט:
נכתב במקור על ידי Ron-Pro צפה בהודעה
תודה רבה על הניסיון לעזור,
אך כמובן שזה לא יפתור את הבעיה.
למה שהפיתרון שלו לא יפתור את הבעיה?, כי אם לא - לא הבנתי מה הבעיה...
__________________
Projector Lamps
  Reply With Quote
ישן 07-11-08, 13:37   # 5
Ron | CSite.co.il
חבר על
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
גיל: 33
הודעות: 980

Ron | CSite.co.il לא מחובר  

הפתרון שלו לא יפתור את הבעיה מסיבה פשוטה,
רק שכל הדף php מסתיים מוצג חלון ההורדה,
כלומר הלולאה תבוצע ורק שהיא תסתים זה ידפיס את חלון ההורדה.
  Reply With Quote
ישן 07-11-08, 14:01   # 6
SniR-S
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Aug 2008
הודעות: 546

SniR-S לא מחובר  

בדקת?
מה שבעצם עשיתי פה הפכתי את לולאת ה while ל do while
שקודם הפעולה תבוצע ורק לאחר מכן היא בודקת אותה..
אם הבנתי נכון זה מה שרצית, השאלה היא אם זה פועל..(זה אמור לעבוד)
  Reply With Quote
ישן 07-11-08, 14:02   # 7
Ron | CSite.co.il
חבר על
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
גיל: 33
הודעות: 980

Ron | CSite.co.il לא מחובר  

כמו שהסברתי למעלה זו לא הבעיה (וכן בדקתי, אף על פי שידעתי שזה לא יעבוד),
הבעיה היא שקודם כל הסקריפט טוען את העמוד ועובר על כולו ורק לאחר מכן מציג את חלון ההורדה,
השאלה איך אפשר לעשות זאת אחרת.
  Reply With Quote
ישן 07-11-08, 17:21   # 8
tbm
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 254
שלח הודעה באמצעות ICO אל tbm שלח הודעה באמצעות MSN אל tbm

tbm לא מחובר  

http://www.php.net/manual/en/function.flush.php
ולי זה יעזור לך...
  Reply With Quote
ישן 07-11-08, 18:04   # 9
vadimg88
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Feb 2008
גיל: 37
הודעות: 710

vadimg88 לא מחובר  

ה flush לא יעזור לו, הסיבה לכך היא פשוטה הגיוני שקובץ של מגה ירד מהר יותר מקובץ של 14 מגה. כדי להציג חלון הורדה הוא צריך לקרוא את כל הקובץ ובעזרת הכותרים המתאימים הוא מציג חלון הורדה במקום בעצם להציג את התוכן שלה קובץ שנקרא. זוהי פעולה נדרשת. מה שאתה יכול לעשות כדי למנוע את זה כדי שיציג את זה ישיר היא פעולת CACHE פעם אחת של הקובץ. לא משנה באיזה פונקציה תשתמש כדי לקרוא את הקובץ זה יקח זמן לקבצים גדולים.

פעם אחת תבצע שמירה של התוכן ב CACHE ולאחר מכן כל פעם שמשהו ינסה להוריד את הקובץ זה ישר יטען את זה מה CACHE במקום לקרוא את הכל ישירות. זה יחסוך המון זמן טעינה.
  Reply With Quote
ישן 07-11-08, 19:12   # 10
Shon12
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 354

Shon12 לא מחובר  

ציטוט:
נכתב במקור על ידי vadimg88 צפה בהודעה
ה flush לא יעזור לו, הסיבה לכך היא פשוטה הגיוני שקובץ של מגה ירד מהר יותר מקובץ של 14 מגה. כדי להציג חלון הורדה הוא צריך לקרוא את כל הקובץ ובעזרת הכותרים המתאימים הוא מציג חלון הורדה במקום בעצם להציג את התוכן שלה קובץ שנקרא. זוהי פעולה נדרשת. מה שאתה יכול לעשות כדי למנוע את זה כדי שיציג את זה ישיר היא פעולת CACHE פעם אחת של הקובץ. לא משנה באיזה פונקציה תשתמש כדי לקרוא את הקובץ זה יקח זמן לקבצים גדולים.

פעם אחת תבצע שמירה של התוכן ב CACHE ולאחר מכן כל פעם שמשהו ינסה להוריד את הקובץ זה ישר יטען את זה מה CACHE במקום לקרוא את הכל ישירות. זה יחסוך המון זמן טעינה.
נשמע לי קצת לא הגיוני...
כל פעם שארצה שבנאדם יוריד מהאתר שלי קובץ גדול של-700Mb(סרט לדוגמא), אני אשמור במחשב של הבנאדם - 700Mb? נשמע ממש לא הגיוני. יוריד שני סרטים , אני אשמור 1.4Gb?
נשמע קצת מטורף...
אני בטוח שזו לא הדרך הנכונה לעשות את זה.
__________________
Projector Lamps
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 19:28.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ