2013-09-02 3 views
6

यह मेरा अपलोड रूप है खाली है।यदि अपलोड की गई फ़ाइल बहुत बड़ी है का पता लगाने

if($_FILES){ 
    echo "Upload done!"; 
} 

$_FILES अगर फाइल तो 5M बड़ा है सेट नहीं है: मैं ऐसा कर सकते हैं। लेकिन यह थोड़ा अजीब है। आप वह कैसे करेंगें?

संपादित करें:

array(0) { 
} 

फ़ाइल के var_dump < = 5M:

5M से अधिक फ़ाइल की var_dump

array(1) { 
    ["fileupload"]=> 
    array(5) { 
    ["name"]=> 
    string(13) "netzerk12.pdf" 
    ["type"]=> 
    string(15) "application/pdf" 
    ["tmp_name"]=> 
    string(22) "/tmp/uploads/phpWhm8M0" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(352361) 
    } 
} 
+0

आप यह सुनिश्चित करें कि वह रिक्त हो रहे हैं? क्या आप हमें वास्तविक 'var_dump()' आउटपुट दिखा सकते हैं? –

+0

हाँ, आप इसे खाली कर देंगे। आप upload_max_filesize सेट और आरं में चर post_max_size किया है। – Hasina

+1

सेट 'post_max_size'>' upload_max_filesize' और आप अपने त्रुटि संदेश (मुझे लगता है कि) – Rob

उत्तर

8

आप जांच कर सकता है $_SERVER['CONTENT_LENGTH']:

// check that post_max_size has not been reached 
// convert_to_bytes is the function turn `5M` to bytes because $_SERVER['CONTENT_LENGTH'] is in bytes. 
if (isset($_SERVER['CONTENT_LENGTH']) 
    && (int) $_SERVER['CONTENT_LENGTH'] > convert_to_bytes(ini_get('post_max_size'))) 
{ 
    // ... with your logic 
    throw new Exception('File too large!'); 
} 
+0

यह मेरे लिए काम करता है, लेकिन मैं आप अभी भी बड़ी फ़ाइलों और "बाढ़" सर्वर – tuna

+0

महान जवाब अपलोड कर सकते हैं, तो आप शायद 'को बदलने के लिए convert_to_bytes (ini_get ('post_max_size' चाहता हूँ)' जो कुछ के साथ स्थिति के लिए समझ में आता है लगता है। ' $ _SERVER [ 'CONTENT_LENGTH'] 'रिटर्न बाइट्स। – Goose

-1

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

सीमित फ़ाइल php आरं के आधार पर आकार का सबसे अच्छा समाधान है, क्योंकि यह आप तक सीमित कर देगा नहीं है। क्या होगा यदि आप किसी अन्य फ़ाइल को दूसरी स्क्रिप्ट में 3 एमबी से अधिक नहीं देखना चाहते हैं?

if ($_FILES['fileupload']['size'] > 5242880) // 5242880 = 5MB 
     echo 'your file is too large'; 
+0

'$ _FILES' वापस आ जाएगी खाली – Bora

+3

यह काम हो सकता है, मैं इसकी सलाह नहीं देते। यह बैंडविड्थ का अपशिष्ट है ताकि उपयोगकर्ता बड़ी फाइलें अपलोड कर सकें जिन्हें आप फेंक देंगे। – Rob

4

Rob उल्लेख की तरह, आपके post_max_size अधिक से अधिक अपने upload_max_filesize से होना चाहिए।

इसके बाद आप $_FILES['fileupload']['error'] देख सकते हैं यदि यह UPLOAD_ERR_INI_SIZE अपलोड की गई फ़ाइल बड़ी है।

तो अपने php.ini में

; Maximum allowed size for uploaded files. 
upload_max_filesize = 5M 

; Must be greater than or equal to upload_max_filesize 
post_max_size = 10M 

सेट अपने uploads.php जांच

if($_FILES['fileupload']['error'] === UPLOAD_ERR_INI_SIZE) { 
    // Handle the error 
    echo 'Your file is too large.'; 
    die(); 
} 
// check for the other possible errors 
// http://php.net/manual/features.file-upload.errors.php 
+0

तो मैं 9petabytes के लिए? अगर मैं सेट उदाहरण के लिए 100M है तो लोगों 101m फ़ाइलों को अपलोड करने शुरू post_max_size स्थापित करने के लिए और यह अब और काम नहीं करता है। हाँ, मैं यह पुनर्गठन किया गया। upload_max_filesize = 5M post_max_size = 6M। अगर मैं 6.4M फ़ाइल $ _FILES अपलोड खाली रहता है। – tuna

+0

आप असीमित अपलोड की अनुमति चाहते हैं, हाँ। लेकिन मैं इसे एक समझदार नंबर पर सेट होता है। और यदि आपके '$ _FILES' सरणी खाली है, की तुलना में है फ़ाइल बड़ी करने के लिए किया गया था। आप === UPLOAD_ERR_NO_FILE' अगर कोई बिल्कुल अपलोड की गई फ़ाइल था जाँच करने के लिए '$ _FILES [ 'fileupload'] [ 'त्रुटि'] के लिए देख सकते हैं। –

0

में मैं एक ही समस्या है, जहां $_FILES खाली होगा यदि अपलोड की गई फ़ाइल बहुत बड़ी है था। xdazz और Florian के समाधान के आधार पर मैंने निष्कर्ष निकाला कि: फ़ाइल आकार post_max_size से अधिक है

  • , तो $_FILES खाली है और $_FILES['fileupload']['error'] इसलिए परिभाषित नहीं है: xdazz के समाधान का उपयोग करें। हालांकि, अगर आप PHP (Warning: POST Content-Length of xxx bytes exceeds the limit of yyy bytes in Unknown on line 0) से एक चेतावनी संदेश मिलता है।
  • यदि फ़ाइल का आकार post_max_size और upload_max_filesize के बीच है, तो उस स्थिति में आप $_FILES['fileupload']['error'] का उपयोग कर सकते हैं, बिना PHP चेतावनी संदेशों से परेशान किए।

कम उपयोग में निम्न कोड:

if (isset($_SERVER['CONTENT_LENGTH']) && 
     (int) $_SERVER['CONTENT_LENGTH'] > (1024*1024*(int) ini_get('post_max_size'))) 
    { 
     // Code to be executed if the uploaded file has size > post_max_size 
     // Will issue a PHP warning message 
    } 

    if ($_FILES[$this->name]['error'] === UPLOAD_ERR_INI_SIZE) { 
     // Code to be executed if the uploaded file has size between upload_max_filesize and post_max_size 
     // Will not issue any PHP warning message 
    } 
संबंधित मुद्दे