2012-08-01 18 views
7

मैं वर्तमान में ऐसी वेबसाइट पर काम कर रहा हूं जहां उपयोगकर्ता फाइल अपलोड कर सकते हैं। मैं बड़ी फ़ाइलों को अपलोड करने से कैसे रोक सकता हूं? उस समय, कोई विकल्प नहीं (PHP का post_max_size और upload_max_filesize) उपयोगी रहा है: फ़ाइल पूरी तरह से अपलोड की गई है। मैं बस कनेक्शन को बहुत बड़ी फ़ाइलों के साथ बंद करना चाहता हूं (Content-Length HTTP शीर्षलेख पहले से जांचकर, और फ़ाइल अपलोड होने के दौरान जांच करके)। क्या इसके लिए अपाचे निर्देश है, या PHP कॉन्फ़िगरेशन कुंजी है?बहुत बड़ी फ़ाइल अपलोड के साथ अपाचे कनेक्शन बंद करें

आपके समय के लिए धन्यवाद!

संपादित करें: Apache conf (CentOS डिफ़ॉल्ट) जोड़ा गया।
EDIT2: PHP conf (CentOS डिफ़ॉल्ट) भी जोड़ा गया।

EDIT3: ऐसा लगता है कि PHP बहुत बड़ी फ़ाइल देने पर पाइप बंद कर देता है। फिर भी, अपाचे अभी भी स्थानांतरण समाप्त होने की अनुमति देता है।

+0

http://stackoverflow.com/questions/4738691/php-bulk-post-500-apache-internal-server-error/4739476#4739476, उस उत्तर के पैरामीटर की जांच करें – regilero

+0

हमने समय के अलावा इन सभी को आजमाया संबंधित: हम कनेक्शन की गति पर निर्भर नहीं होना चाहते हैं। वैसे भी, PHP समस्या नहीं है, यह अपाचे है। – Iso

+0

जैसा कि लिंक में बताया गया है और @PhpMyCoder उत्तर में आपके पास अपाचे सेटिंग्स में LimitRequestBody है। – regilero

उत्तर

2

ठीक है।

तो मुख्य समस्या यह है कि आप का सामना कर रहे है कि अपाचे निर्देश LimitRequestBody या LimitXMLRequestBody अपलोड के पूरा होने के बाद लागू किए जाते है। ऐसा लगता है कि अपाचे की तरह आकार जांचने से पहले एक अस्थायी फ़ोल्डर में पूरी फ़ाइल की प्रतीक्षा कर रहा है।

तो आपको बहुत बड़े अपलोड का पता लगाने के बाद कनेक्शन को काटने की आवश्यकता है। एक समय mod_throttle ऐसा करने के लिए एक मॉड्यूल उपलब्ध था। यह Alternative to mod_throttle servfault question जांच कर आप बैंडविड्थ नियंत्रण मॉड्यूल की एक सूची प्राप्त कर सकते हैं जो आपकी आवश्यकताओं के अनुरूप हो सकता है।

mod_bwshare उदाहरण के लिए बैंडविड्थ प्रति क्लाइंट आईपी को सीमित करने में सक्षम है, लेकिन यह एक प्रति-अनुरोध per_IP सीमा नहीं है। mod_quos भी है, डाउनलोड चीजों पर बहुत सी सीमाएं हैंडल करते हैं, लेकिन मुझे अपलोड मैनेजमेंट के लिए बहुत सी चीजें नहीं मिल रही हैं (केवल शुरुआती धीमे अपलोड को बंद करना)। this answer on throttling uploads भी देखें।

तो तुम भी के लिए ओएस स्तर सीमा (टीसीपी ढेर पर) या उन्नत फ़ायरवॉल क्षमताओं (servfault पर पूछना) की जाँच कर सकते हैं।

आप क्लाइंट साइड सीमा उपकरण, जैसे छिपे हुए फॉर्म मान या जेएस अपलोडर सेटिंग्स का भी उपयोग कर सकते हैं, लेकिन किसी भी तरह की क्लाइंट-साइड की तरह, सुरक्षा की अवधि में आप किसी क्लाइंट-साइड सीमाओं को बदलने से नहीं बच सकते हैं।

2

आप अपाचे के LimitRequestBody का उपयोग कर सकते हैं। सिंटेक्स सरल (और बाइट्स में) है:

LimitRequestBody 10490000 # 10 MB 

यह httpd.conf और .htaccess दोनों में काम करता है, बस पुनः आरंभ करने के प्रति जागरूक करता है, तो आप (Ubuntu पर sudo service apache2 restart) httpd.conf संपादित हो।

आप एक प्रति फ़ाइल के आधार पर प्रतिबंध सेट करने के लिए की जरूरत है (सीमा अवतार 5 एमबी पर अपलोड है, लेकिन 20 MB सीमा संलग्नक), तो आपको <Files> उपयोग कर सकते हैं:

<Files avatarUpload.php> 
    LimitRequestBody 5242880 # 5 MB 
</Files> 

<Files attachmentUpload.php> 
    LimitRequestBody 20971520 # 20 MB 
</Files> 
+2

हमने इसका परीक्षण भी किया; दुख की बात है कि फाइल पूरी तरह से अपलोड हो चुकी है और अपाचे बाद में कनेक्शन छोड़ देता है। – Iso

+0

वास्तव में? फिर आपको अपाचे के साथ एक बग रिपोर्ट लॉग करनी चाहिए - यह स्पष्ट रूप से विपरीत है कि यह कार्यक्षमता क्या करने का इरादा है (यानी मैं आपकी पद्धति का बहुत संदिग्ध हूं) – symcbean

+0

अच्छा वन .... :) – Baba

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