2010-08-22 13 views
6

PHP में बड़ी फ़ाइलों को अपलोड करते समय मुझे एक अजीब समस्या है।बड़ी फ़ाइलों को अपलोड करते समय अजीब समस्या

php.ini में, max_execution_time 30, post_max_size पर सेट है 32 एम, upload_max_filesize 32M पर सेट है। जब मैंने 40.2 एमबी आकार की फाइल अपलोड करने का प्रयास किया, तो यह कोई त्रुटि नहीं दिखाता है। $_FILES चर के मूल्य array(0) { } और $_FILES['userfile']NULL दिखाता है।

फ़ाइल आकार php.ini में सेट मूल्य से अधिक है, तो यह त्रुटि संदेश लौटना चाहिए

UPLOAD_ERR_INI_SIZE, मूल्य: 1; अपलोड की गई फ़ाइल php.ini में upload_max_filesize निर्देश से अधिक है।

लेकिन यह कोई त्रुटि नहीं दिखा रहा है (जैसा कि $_FILES एक खाली सरणी है)। मैं अनजान हूं कि यह क्यों हो रहा है।

जब मैं php.ini में बदलता हूं और post_max_size सेट करता हूं तो 64 एम पर सेट होता है, upload_max_filesize 64 एम पर सेट होता है, तो यह ठीक काम करता है। इसलिए, मैंने php.ini फ़ाइल को बदलने के बजाय निम्न कोड का उपयोग करने का निर्णय लिया।

ini_set('upload_max_filesize', '64M'); 
ini_set('post_max_size', '64M'); 
ini_set('max_execution_time', 300); 

मैंने max_execution_time को बढ़ाने की भी कोशिश की। फिर भी, मुझे एक ही समस्या है। ini_set() यहां काम नहीं कर रहा है।

+0

मुझे यकीन है कि क्यों UPLOAD_ERR_INI_SIZE त्रुटि नहीं उठाया जा रहा था नहीं कर रहा हूँ, लेकिन मैं upload_max_filesize की स्थापना का कहना है कि या ini_set साथ post_max_size कोई को प्रभावित किया है, क्योंकि इन एक क्रम सेट नहीं किया जा सकता है सकते हैं, यह आरं सूची के अनुसार : http://www.php.net/manual/en/ini.list.php –

उत्तर

19

अपलोड करने में त्रुटि के साथ 40 एमबी फ़ाइल विफल होने के लिए, यदि आप उस चर के मान को पार करते हैं, तो आपको post_max_size को बढ़ाना होगा, आपको खाली $ _FILES सरणी मिल जाएगी। the manual

देखें पोस्ट डेटा का आकार अधिक से अधिक post_max_size से है, तो $ _POST और $ _FILES superglobals खाली हैं।

इसके अलावा, ini_set() वहाँ काम नहीं कर रहा चर आप बदलना कोशिश कर रहे हैं में से दो हैं PHP_INI_PERDIR और इस तरह php.ini में या .htaccess या httpd.conf में परिवर्तित करने की आवश्यकता है। आप उदाहरण के लिए, के साथ 40MB फ़ाइल की कोशिश करनी चाहिए, these settings in .htaccess

php_value upload_max_filesize 32M 
php_value post_max_size 64M 
php_value max_execution_time 300 
+0

सर्वश्रेष्ठ उत्तर, सिवाय इसके कि आप upload_max_filesize और post_max_size को ini_set() का उपयोग करके, केवल .conf या .ini फ़ाइलों के माध्यम से सेट नहीं कर सकते हैं। –

+0

@ माइकल: हाँ, एहसास हुआ कि बाद में, पहले ही तय किया गया है, धन्यवाद –

+0

वास्तव में यह बेवकूफ है! wqhat अगर मैं अपनी साइट के मेहमानों को 2 एमबी से अधिक अपलोड करने की अनुमति नहीं देना चाहता हूं (बाढ़ के cuz वे कर सकते हैं) लेकिन अगर वे 150 एमबी तक अपलोड करने के सदस्य हैं ???? –

1

नहीं है एक और आप को देखने के लिए आवश्यकता हो सकती है की स्थापना, अपाचे के LimitRequestBody

यदि फ़ाइल उस से अधिक है, तो अपलोड भी PHP तक पहुंचने से पहले अवरुद्ध हो सकता है।

Apache Documentation

+0

यह भी एक अच्छा मुद्दा है। मैं इसे कभी नहीं जानता था। साझा करने के लिए धन्यवाद। – Debiprasad

1

ini_set() यहाँ काम नहीं कर रहा।

मूल्यों आप max_execution_time के लिए छोड़कर, ini_set() साथ बदलने के लिए कोशिश कर रहे हैं, ini_set() साथ बदला नहीं जा सकता।
list of php.ini directives में, उन्हें PHP_INI_PERDIR टाइप किया गया है, जिसका अर्थ है (जैसा कि Where a configuration setting may be set में बताया गया है) कि वे php.ini, .htaccess या httpd.conf में बदल सकते हैं। कॉन्फ़िगरेशन सेटिंग्स जिन्हें ini_set() के साथ बदला जा सकता है वे PHP_INI_USER के रूप में चिह्नित हैं।

+0

मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करना चाहता हूं, लेकिन स्टैक ओवरफ़्लो केवल एक उत्तर को स्वीकार किए गए उत्तर के रूप में चिह्नित करने की अनुमति देता है, जिसे मैंने पहले ही चिह्नित किया है। – Debiprasad

+0

@ डेबिप्रसाद: दो स्वीकृत उत्तरों होना संभव नहीं है; स्वीकृत के रूप में एक और उत्तर चुनने से पहले, आपको पहले चयनित चयन को अचयनित करना चाहिए। – kiamlaluno

0
सर्वर के लिए

:

php के लिए cPanel खोज में, आप सॉफ्टवेयर के तहत "PHP संस्करण का चयन करें" मिल जाएगा। सॉफ्टवेयर -> PHP संस्करण का चयन करें -> PHP विकल्प पर स्विच करें -> बदलें मूल्य -> ​​सहेजें।

स्थानीय

:

पीएचपी आरं (विन्यास सेटिंग्स) XAMPP के तहत php फ़ोल्डर में फ़ाइल का पता लगाएं। बदलें post_max_size = 40M और upload_max_filesize = 40M

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