多个上传PHP表单中的最大大小问题

时间:2014-12-31 00:44:23

标签: php

这让我发疯了。也许有人可以看到我能做的事情并让我开心。

我有一个带有两个上传按钮的表单。它需要这样(客户要求)。

 <fieldset>
  <legend>SUBIR DOCUMENTOS </legend>
  <span class="help-block">Aquí solo tienes que subir los documentos NO relacionados con un contrato. </span>                  
  <div class="form-group">
      <label for="inputFile1"> Documento A </label>
      <input type="file" id="inputFile1" name="inputFile1"> 
      <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />                   
  </div>
  <div class="form-group">
      <label for="inputFile2"> Documento B </label>
      <input type="file" id="inputFile2" name="inputFile2"> 
      <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />                   
    </div>
 </fieldset>

除了第二个文件(inputFile2)超过最大大小时的错误消息,每个东西都能正常工作。在这种情况下,文件不会上传(正确),但会显示成功消息。

以下是代码:

include_once ('includes/functions.php');  

if(!empty($_FILES)) {               

     $message_error = array();
     $message_success = array();


    foreach($_FILES as $file){  
    $file_name = $file['name'];
    $file_temp_name = $file['tmp_name'];
    $file_type = $file['type'];
    $file_size = $file['size'];
    $server_file= EGAR_UPLOADPATH . basename($file_name); 
    $ext = pathinfo($server_file,PATHINFO_EXTENSION);
    $path_parts = pathinfo($file_name); 
      $allowedExtensions = array("pdf","doc","docx","rtf","txt", "gif", "png", "jpg", "jpeg");

 if (!empty($file['name'])){  
     //move the file to the server 
        if ((in_array( $ext,$allowedExtensions)) && ($file_size <= EGAR_MAXFILESIZE)){
            $server_file= EGAR_UPLOADPATH . $file_name; ///public_html/test-site-6/uploads
            move_uploaded_file($file_temp_name,$server_file);
            $success_upload= "$file_name subido correctamente";
            array_push($message_success,$success_upload);           
      }else{   
                if($file_size > EGAR_MAXFILESIZE) {//1mb
                    $filesize= "es demasiado grande (máximo 1MB)  ";
                $error_upload ="$file_name $filesize <br/>";    
                array_push($message_error,$error_upload); 
          }

          if(!in_array( $ext,$allowedExtensions)) {    
                      $filetype=" es un tipo de archivo no válido";
                        $error_upload ="$file_name $filetype <br/>";        
                        array_push($message_error,$error_upload);
                    }
      }

    }//if empty

    }//end foreach  

    foreach($message_error as $msg)  {
     echo '<h3 class="error">'. $msg . '</h3>';
  } 
  foreach($message_success as $msg)  {
     echo '<h3 class="success">'. $msg . '</h3>';
  }  

}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

max_upload_size和max_post_size指令位于php.ini中。将它们更改为所需的值并重新启动apache。请参阅此帖子:Stackoverflow Question

即使失败,您的成功消息也会发生,因为成功条件只是文件具有名称且具有适当的扩展名。测试条件应为:

if( move_uploaded_file($file_temp_name,$server_file) ){
  $success_upload = 'blah';
}

答案 1 :(得分:1)

感谢大家,但你的建议没有用。你所说的一切都有道理,但它没有解决问题。最后,我意识到问题不是在PHP中,而是在HTLM中。

我正在使用一个隐藏的&#34; MAX_FILE_SIZE&#34;每个文件的输入,它只应该是整个表格的一个。

使用以下新代码,它就像魅力一样。

  <div class="col-lg-12">
        <div class="well ">
         <fieldset>
            <legend>SUBIR DOCUMENTOS </legend>
            <span class="help-block">Aquí solo tienes que subir los documentos NO relacionados con un contrato. </span>                  
            <div class="form-group">
                <label for="inputFile1"> Documento A </label>
                <input type="file" id="inputFile1" name="inputFile1">                             
            </div>
            <div class="form-group">
                <label for="inputFile2"> Documento B </label>
                <input type="file" id="inputFile2" name="inputFile2">                                    
            </div>
            <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />          
           </fieldset>
        </div>
      </div>
     </div><!--outer-->