2009-06-03 19 views
37

मैं यह सुनिश्चित करने के लिए कुछ फॉर्म सत्यापन करता हूं कि उपयोगकर्ता द्वारा अपलोड की गई फ़ाइल सही प्रकार का है। लेकिन अपलोड वैकल्पिक है, इसलिए अगर मैं कुछ अपलोड नहीं करता और शेष फॉर्म जमा नहीं करता तो मैं सत्यापन को छोड़ना चाहता हूं। मैं कैसे जांच सकता हूं कि उसने कुछ अपलोड किया है या नहीं? $_FILES['myflie']['size'] <=0 काम करेगा? डॉक्स सेयह जांचने के लिए कि उपयोगकर्ता ने PHP में फ़ाइल अपलोड की है या नहीं?

if(!file_exists($_FILES['myfile']['tmp_name']) || !is_uploaded_file($_FILES['myfile']['tmp_name'])) { 
    echo 'No upload'; 
} 

:

उत्तर

101

आप is_uploaded_file() उपयोग कर सकते हैं

रिटर्न सही अगर फ़ाइल नाम से नाम की फ़ाइल HTTP POST के माध्यम से अपलोड किया गया था। यह सुनिश्चित करने में मदद के लिए उपयोगी है कि दुर्भावनापूर्ण उपयोगकर्ता ने पर पर फ़ाइलों पर काम करने में स्क्रिप्ट को चलाने की कोशिश नहीं की है, जो इसे काम नहीं करना चाहिए - उदाहरण,/etc/passwd के लिए। अगर कोई मौका एक ही सिस्टम पर अपलोड की गई फ़ाइलों के साथ किया है कि कुछ भी, या यहाँ तक कि अन्य उपयोगकर्ताओं को उपयोगकर्ता के लिए उनकी सामग्री प्रकट कर सकता है है

की जांच इस तरह विशेष रूप से महत्वपूर्ण है।

संपादित करें: मैं अपने FileUpload कक्षा में इस का उपयोग कर रहा हूँ, मामले में यह मदद करता है:

public function fileUploaded() 
{ 
    if(empty($_FILES)) { 
     return false;  
    } 
    $this->file = $_FILES[$this->formField]; 
    if(!file_exists($this->file['tmp_name']) || !is_uploaded_file($this->file['tmp_name'])){ 
     $this->errors['FileNotExists'] = true; 
     return false; 
    } 
    return true; 
} 
+0

आयुमान, आपको इसे 'tmp_name' देना होगा। दस्तावेज़ से: उचित काम करने के लिए, फ़ंक्शन is_uploaded_file() को $ _FILES ['userfile'] ['tmp_name'] – karim79

+0

@ क्लिक अपवॉट पर एक तर्क की आवश्यकता है - शुरुआत में file_exists() बिट जोड़ा गया है, मैं वास्तव में उपयोग कर रहा हूं कि, तो मुझे पता है कि यह काम करता है। इसकी कोशिश करें। – karim79

+0

मेरा बुरा - $ _FILES सरणी, जैसा कि ग्रेग बी ने इंगित किया है, खाली के साथ चेक किया जाना चाहिए() – karim79

10

@ karim79 सही जवाब है, लेकिन मैं अपने उद्देश्यों के अनुरूप करने के लिए अपने उदाहरण के पुनर्लेखन के लिए किया था। उनका उदाहरण मानता है कि सबमिट किए गए फ़ील्ड का नाम ज्ञात है और इसमें हार्ड कोड किया जा सकता है। मैंने इसे एक कदम आगे बढ़ाया और एक समारोह बनाया जो मुझे बताएगा कि अपलोड फ़ील्ड के नाम के बिना किसी भी फाइल को अपलोड किया गया है या नहीं।

/** 
* Tests all upload fields to determine whether any files were submitted. 
* 
* @return boolean 
*/ 
function files_uploaded() { 

    // bail if there were no upload forms 
    if(empty($_FILES)) 
     return false; 

    // check for uploaded files 
    $files = $_FILES['files']['tmp_name']; 
    foreach($files as $field_title => $temp_name){ 
     if(!empty($temp_name) && is_uploaded_file($temp_name)){ 
      // found one! 
      return true; 
     } 
    } 
    // return false if no files were found 
    return false; 
} 
+0

हर बार मुझे झूठा कर दें यदि (खाली ($ _ FILES)) .... – Phoenix

8

यह कोड मेरे लिए काम किया। मैं एकाधिक फ़ाइल अपलोड का उपयोग कर रहा हूं इसलिए मुझे यह जांचने की आवश्यकता है कि कोई अपलोड किया गया है या नहीं।

एचटीएमएल हिस्सा:

<input name="files[]" type="file" multiple="multiple" /> 

पीएचपी हिस्सा:

if(isset($_FILES['files'])){ 


foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 

     if(!empty($_FILES['files']['tmp_name'][$key])){ 

    // things you want to do 
    } 
} 
3

मैं अपने कोड की जाँच की और लगता है कि आप इस प्रयास करना चाहिए:

if(!file_exists($_FILES['fileupload']['tmp_name']) || !is_uploaded_file($_FILES['fileupload']['tmp_name'])) 
    { 
     echo 'No upload'; 
    } 
    else 
     echo 'upload'; 
1

is_uploaded_file(), उपयोग करने के लिए बहुत अच्छा है विशेष रूप से के लिए यह जांचना कि यह एक अपलोड की गई फ़ाइल या स्थानीय फ़ाइल है (सुरक्षा उद्देश्यों के लिए)।

हालांकि, यदि आप यह जांचना चाहते हैं कि उपयोगकर्ता ने फ़ाइल अपलोड की है, $_FILES['file']['error'] == UPLOAD_ERR_OK का उपयोग करें।

file upload error messages पर PHP मैनुअल देखें। यदि आप बस कोई फ़ाइल नहीं देखना चाहते हैं, तो UPLOAD_ERR_NO_FILE का उपयोग करें।

2
<!DOCTYPE html> 
<html> 
<body> 

<form action="#" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input name="my_files[]" type="file" multiple="multiple" /> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 


<?php 

if (isset($_FILES['my_files'])) 
    { 
    $myFile = $_FILES['my_files']; 
    $fileCount = count($myFile["name"]); 


     for ($i = 0; $i <$fileCount; $i++) 
     { 
      $error = $myFile["error"][$i]; 

      if ($error == '4') // error 4 is for "no file selected" 
      { 
       echo "no file selected"; 
      } 
      else 
      { 

       $name = $myFile["name"][$i]; 
       echo $name; 
       echo "<br>"; 
       $temporary_file = $myFile["tmp_name"][$i]; 
       echo $temporary_file; 
       echo "<br>"; 
       $type = $myFile["type"][$i]; 
       echo $type; 
       echo "<br>"; 
       $size = $myFile["size"][$i]; 
       echo $size; 
       echo "<br>"; 



       $target_path = "uploads/$name"; //first make a folder named "uploads" where you will upload files 


       if(move_uploaded_file($temporary_file,$target_path)) 
        { 
        echo " uploaded"; 
        echo "<br>"; 
        echo "<br>"; 
        } 
        else 
        { 
        echo "no upload "; 
        } 




       } 
     } 
} 
     ?> 


</body> 
</html> 

उल्लेख http://www.techzigzag.com/how-to-check-that-user-has-upload-any-file-or-not-in-php/

लेकिन सावधान रहना। उपयोगकर्ता किसी भी प्रकार की फ़ाइल अपलोड कर सकता है और दुर्भावनापूर्ण या php फ़ाइल अपलोड करके आपके सर्वर या सिस्टम को भी हैक कर सकता है।इस लिपि में कुछ सत्यापन होना चाहिए। धन्यवाद।

1

आपको $_FILES[$form_name]['error'] का उपयोग करना चाहिए। यदि कोई फ़ाइल अपलोड नहीं की गई है तो यह UPLOAD_ERR_NO_FILE देता है। पूर्ण सूची: PHP: Error Messages Explained

function isUploadOkay($form_name, &$error_message) { 
    if (!isset($_FILES[$form_name])) { 
     $error_message = "No file upload with name '$form_name' in form."; 
     return false; 
    } 
    $error = $_FILES[$form_name]['error']; 

    // List at: http://php.net/manual/en/features.file-upload.errors.php 
    if ($error != UPLOAD_ERR_OK) { 
     switch ($error) { 
      case UPLOAD_ERR_INI_SIZE: 
       $error_message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.'; 
       break; 

      case UPLOAD_ERR_FORM_SIZE: 
       $error_message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.'; 
       break; 

      case UPLOAD_ERR_PARTIAL: 
       $error_message = 'The uploaded file was only partially uploaded.'; 
       break; 

      case UPLOAD_ERR_NO_FILE: 
       $error_message = 'No file was uploaded.'; 
       break; 

      case UPLOAD_ERR_NO_TMP_DIR: 
       $error_message = 'Missing a temporary folder.'; 
       break; 

      case UPLOAD_ERR_CANT_WRITE: 
       $error_message = 'Failed to write file to disk.'; 
       break; 

      case UPLOAD_ERR_EXTENSION: 
       $error_message = 'A PHP extension interrupted the upload.'; 
       break; 

      default: 
       $error_message = 'Unknown error'; 
      break; 
     } 
     return false; 
    } 

    $error_message = null; 
    return true; 
} 
संबंधित मुद्दे

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