2009-02-23 10 views
30

हाय PHP के लिए काफी नया है, मैंने अपने सर्वर पर अपलोड करने के लिए बहुत बड़ी सीएसवी फाइलों के लिए एक फॉर्म बनाया है। किसी ने मुझे बताया कि ब्राउज़र अपलोड करने की फ़ाइल के कारण समय समाप्त हो सकता है, क्या यह सच है? और यदि हां, तो इसे रोका जा सकता है?PHP में अपलोड समय फाइल कर सकते हैं?

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

उत्तर

50

आप निम्न php.ini सेटिंग्स के लिए एक उचित मूल्य की जरूरत है: (! नहीं max_execution_time)

  1. max_input_time
  2. upload_max_filesize
  3. post_max_size

और शायद

  1. memory_limit
+6

max_input_time के लिए PHP दस्तावेज़ कहता है: "यह स्क्रिप्ट निष्पादन की शुरुआत में सर्वर पर सभी डेटा प्राप्त करने के पल से मापा जाता है।" तो फाइल का आकार क्यों फर्क पड़ता है? इस टाइमर शुरू होने से पहले सभी डेटा प्राप्त हुए हैं। – Oscar

+0

परीक्षण के बाद मैं पुष्टि करता हूं कि 'max_input_time' इस समस्या पर कोई प्रभाव नहीं पड़ता है। –

1

हाँ यह सच है। फ़ाइल अपलोड POST अनुरोध के माध्यम से किया जाता है और सामान्य रूप से अनुरोध टाइमआउट के अधीन होते हैं। आपको लंबे समय तक अनुरोध के लिए अपने पर्यावरण को पुन: कॉन्फ़िगर करने में सक्षम होना चाहिए।

2

30 सेकंड की तरह कुछ के लिए डिफ़ॉल्ट रूप से एक स्क्रिप्ट चलाने की अनुमति है। आप इसे बदलने के लिए set_time_limit() function का उपयोग कर सकते हैं। साथ ही, यदि आपके उपयोगकर्ता को बड़ी फ़ाइलों को अपलोड करने की आवश्यकता होगी, तो आपको post_max_size और/या upload_max_filesize मानों को अपनी php.ini फ़ाइल में बदलना होगा।

इसके अलावा, यदि आप वैश्विक स्तर पर अपनी टाइमआउट सीमा को विस्तारित करना चाहते हैं, तो आप php.ini में अधिकतम निष्पादन-समय बदल सकते हैं।

+0

प्रतिभाशाली, उसके लिए धन्यवाद! मैं भी post_max_size के बारे में जानते हैं या upload_max_file_size फ्लॉप! बहुत बहुत apreciated –

+1

set_time_limit php.ini में max_execution_time रूप में एक ही सेटिंग को प्रभावित करता है। डॉक्टर कहते हैं "अधिकतम निष्पादन समय सिस्टम कॉल, स्ट्रीम ऑपरेशंस इत्यादि से प्रभावित नहीं होता है" क्या फ़ाइल अपलोड "स्ट्रीम ऑपरेशन" के रूप में गिनती है? यदि ऐसा है, तो ऐसा लगता है कि यह सेटिंग मदद नहीं करेगा। – Oscar

1

यह सिर्फ इतना है कि समस्याएं पैदा कर सकता टाइमआउट नहीं है। फ़ाइल के अधिकतम आकार पर कुछ सीमाएं अपलोड की जा सकती हैं। ये सीमाएं php.ini फ़ाइल में बदला जा सकता है:

post_max_size
upload_max_filesize memory_limit

चेक बाहर http://uk.php.net/ini.core जानकारी के लिए।

27

कुछ विन्यास निर्देशों कि बड़े अपलोड विफल करता है, तो उनके मूल्यों बहुत छोटे हैं पैदा कर सकता है कर रहे हैं:

पीएचपी

  • max_input_time सेकंड में अधिकतम समय एक स्क्रिप्ट इनपुट डेटा पार्स करने के लिए अनुमति दी है, पोस्ट की तरह, प्राप्त करें और फ़ाइल अपलोड करें
  • upload_max_filesize अपलोड की गई फ़ाइल का अधिकतम आकार।
  • post_max_size पोस्ट डेटा का अधिकतम आकार अनुमत है।

अपाचे

  • TimeOut समय की राशि सर्वर अनुरोध पर
  • LimitRequestBody ग्राहक
  • से भेजे गए HTTP अनुरोध शरीर का कुल आकार तक सीमित करता है असफल होने से पहले कुछ घटनाओं के लिए इंतजार करेंगे

संभवतः की तुलना में कुछ अधिक कर रहे हैं इस।

+0

मुझे पता नहीं है कि अपाचे सेटिंग्स को संपादित करने के लिए भी जाना जाता है :( –

+0

यदि आपकी सेटिंग्स बड़ी फ़ाइलों को अपलोड करने के लिए उचित हैं, तो अपने प्रदाता से पूछें। – Gumbo

3

जब बहुत बड़ी फ़ाइलों को अपलोड करने के लिए, आप 4 विन्यास चर बदलना होगा:

  • upload_max_filesize
  • post_max_size
  • memory_limit
  • time_limit

समय सीमा कार्यावधि में बढ़ाया जा सकता है set_time_limit() के साथ।

+0

मेरे जानने के लिए PHP - time_limit में कोई ऐसा निर्देश नहीं है। Set_time_limit() max_execution_time सेट करता है। – jayarjo

4

PHP में बड़ी फ़ाइल अपलोड की खराब संचालन के आसपास काम करने का एक अच्छा तरीका है, JUpload जैसे अपलोडर का उपयोग करना है जो उन्हें भेजने से पहले फ़ाइल को टुकड़ों में विभाजित करेगा। यह भी अपने उपयोगकर्ताओं को यह कि वे उचित प्रगति प्रतिक्रिया को अपलोड करते समय मिलता है के लिए लाभ है, और वे एक ही बार में एकाधिक फ़ाइलों को अपलोड कर सकते हैं।

1

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

1

मैं था सक्षम निम्नलिखित सेटिंग्स का उपयोग कर, आप विभिन्न मूल्यों के इस्तेमाल कर सकते हैं इस समस्या को हल, लेकिन आप अंदाजा हो:

अपने सर्वर के लिए, मैं स्क्रिप्ट के अंदर एक ".user.ini" फ़ाइल में इन पंक्तियों डाल निर्देशिका, अपने सर्वर एक अलग फ़ाइल के लिए लग सकता है, यदि आप सर्वर पर एक phpinfo ('user_ini.filename') कर यह फ़ाइल आप अगर किसी को भी बदलने

max_execution_time = 1800 
max_input_time = -1 
post_max_size = 100M 
upload_max_filesize = 100M 
memory_limit = 256M 
0

में अपने मूल्यों लगाने की जरूरत है थूक से बाहर होगा इसके बाद के संस्करण पैरामीटर कोई फर्क नहीं लगता है, यह हो सकता है कि एक एचटीएमएल प्रपत्र कहीं एक छिपी हुई फ़ील्ड के रूप में नाम MAX_FILE_SIZE शामिल हैं।

<input type="hidden" name="MAX_FILE_SIZE" value="10000000">

उपरोक्त उदाहरण में, 10 एमबी से अधिक किसी भी फाइल अपलोड नहीं किया जाएगा।

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

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