2012-06-13 21 views
6

मैंने सभी शीर्षकों की कोशिश की है। सामग्री-लंबाई के साथ और बिना।900 एमबी http मजबूर डाउनलोड शायद ही कभी खत्म हो

समस्या यह है कि dowload आधे रास्ते के आसपास बाहर क्रेप्स है। लेकिन केवल ज्यादातर समय।

कभी-कभी यह ठीक काम करता है।

सर्वर संसाधन उपयोग छोटा है। सभी कॉन्फ़िगरेशन फ़ाइलें ठीक हैं। जब मैं जा रहा हूं तो मैं php स्क्रिप्ट नहीं चलाता।

क्या किसी ने इसे पहले देखा है? क्या यह मेरी गलती भी नहीं है? कभी कभी क्यों?

$file = "http://domain.com/files/".$item_number.".mov"; 
header('Pragma: no-cache'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Content-Description: File Download'); 
header('Content-Type: application/force-download'); 
//header ('Content-Type: video/quicktime');//doesnt seem to download at all here 
header('Content-Length: '.filesize($file)); 
header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
header('Content-Transfer-Encoding: binary'); 
readfile($file); 
exit(); 

धन्यवाद, क्षमा करें यह मेरा पहला समय है।

+4

क्या यह डाउनलोड एक PHP स्क्रिप्ट को कम कर दिया जा रहा है? क्या आप हमें कोड दिखा सकते हैं? –

+3

एफबीआई बंद करने वाले प्रश्नों को बंद करें क्योंकि उन्हें नौसिखिया से पूछा जाता है। यह 100% असली सवाल है। –

+0

क्या आपने अपनी लॉग फाइलों को देखा है? पीएस - कोड कृपया। – xbonez

उत्तर

3

इसमें कई कारण हो सकते हैं।

आप कह रहे हैं कि सर्वर संसाधनों ठीक हैं, लेकिन मैं स्मृति में PHPs लगता है कि यह भेजने से पहले readfile() भार पूरी फ़ाइल। सौभाग्य से उन दस्तावेज़ों में एक अच्छा solution है जो आपको निश्चित रूप से एकाधिक डाउनलोड के साथ समस्याओं में भागने से रोकने के लिए उपयोग करना चाहिए :)

इसके अलावा, क्या आपने अपनी स्क्रिप्ट निष्पादन का समय अनंत तक सेट किया है?

अगला आपकी सर्वर सेटिंग्स होगी। हो सकता है कि वे कुछ टाइमआउट/संसाधन हॉग कारण के लिए कनेक्शन बंद करें।

उदाहरण गूगल Chromes डेवलपर उपकरण के लिए उपयोग बारीकी से हेडर आप भेज रहे हैं जांच करने के लिए। PHP कुछ शीर्षकों को अपने आप सेट करता है। आपको अपनी स्क्रिप्ट की शुरुआत में session_cache_limiter(false); रखना चाहिए। अगर मुझे सही याद है, यहां तक ​​कि Expires: Thu, 19 Nov 1981 08:52:00 GMT ... यह बुरा क्यों है? अगले आ;)

आप ETag और Last-Modified हैडर भेज सकते हैं। मुझे लगता है कि यह आपके संसाधन के लिए एक अद्वितीय पहचानकर्ता है, जो डाउनलोड को फिर से शुरू करना संभव बनाता है। मुझे लगता है कि इसके बारे में अच्छे लेख देखकर आपको कुछ वाक्यों को देने से बेहतर है। अपने मामले में आप एटाग बनाने के लिए PHP stat() फ़ंक्शन का उपयोग कर सकते हैं।

कुछ लोग हेडर और डाउनलोड के साथ संघर्ष कर, आप here

सारांश शुरू कर सकता है (या अपने मामले को ठीक कर रहे हैं):

  • की जाँच करें अपने PHP/सर्वर समाप्ति/सीमाओं/संसाधन सेटिंग्स
  • फ़ाइल को बफर किया जाना
  • डाउनलोड को फिर से शुरू करना संभव बनाएं
  • शीर्षलेखों को चेक करें जिन्हें आप भेज रहे हैं

इस के बाद आप ठीक होना चाहिए। यहां तक ​​कि यह अभी भी तोड़ना चाहिए अगर शुरू करने ...

अच्छी प्रगति और सफलता के साथ!

+1

मैन्युअल से "readfile() बड़ी फ़ाइलों को भेजने पर भी, किसी भी मेमोरी समस्याएं प्रस्तुत नहीं करेगा। अगर आपको स्मृति त्रुटि से बाहर निकलना पड़ता है तो सुनिश्चित करें कि आउटपुट बफरिंग ob_get_level() के साथ बंद है।" – Matthew

+0

शायद साझा मेजबान या कुछ और - मैंने बस उन सभी को सारांशित किया जो मुझे पता है कि कारण हो सकता है :) readfile() एक स्मृति समस्या प्रस्तुत नहीं करेगा * अगर * ... यह निश्चित रूप से सूची में से एक है। –

+0

http://stackoverflow.com/questions/6627952/why-does-readfile-exhaust-php-memory सर्वर बकवास, एकाधिक उपयोगकर्ता, अनिवार्य रूप से मैंने जो कहा - और मुख्य बात अभी भी संसाधन –

संबंधित मुद्दे