【问题标题】:Specify file format upload in HTML forms [duplicate]指定 HTML 表单中的文件格式上传 [重复]
【发布时间】:2012-01-28 21:48:02
【问题描述】:

可能重复:
How to restrict <input type=“file”> so that it can only select .pdf files?

我的上传表单是

<form action="chainresult.php" method="post" enctype="multipart/form-data" />
   <div>  Upload a PDB file :  <br />
   <input type="hidden" name="MAX_FILE_SIZE" value="10485760"/>
   <input type="file" name="userfile" id="userfile" size="50000000" /><br />
   <input type="submit" value="GET SEQUENCE" />  </div>
</form>  

我只想接受名为四个字母且扩展名为 .pdb 的文件,例如 "ABCD.pdb" ,我该如何实现?
upload.php 是

<?php  
    $upfile = 'uploads/'.$_FILES['userfile']['name'];  if (is_uploaded_file($_FILES['userfile']['tmp_name']))  
    {  
    if (!move_uploaded_file($_FILES['userfile']['tmp_name'],upfile))  
    {  
    echo 'Problem: Could not move file to destination directory';  
    exit;  
    }  
    }  
    else  
    {  
    echo 'Problem: Possible file upload attack. Filename: ';  
    echo $_FILES['userfile']['name'];  
    exit;  
    }   ?>

【问题讨论】:

标签: php html forms


【解决方案1】:

你有一个选择。当文件上传时,它会被赋予一个临时名称并存储在一个临时文件中,然后在批准后 - 根据您的代码 - 移动并给出上传名称(默认情况下)或您指定的 4 个字母。这是更大的问题......覆盖? 4 个字母不会让您有太多变化 - 如果您使用的是 mickeysoft.... 哎呀!如果您在 Linux 上将大小写转换为较低(首选),则检索时可能会非常混乱。

【讨论】:

    【解决方案2】:

    和ahhmarr说的一样,但是我用这个函数来确定文件扩展名:

    function getExtension($str){
        $i = strrpos($str,'.');
        if(!$i)
            return '';
    
        $l = strlen($str) - $i;
        $ext = substr($str, $i+1, $l);
        return $ext;
    }
    
    $name = $_FILES['userfile']['name'];
    $ext  = getExtension($name); 
    

    【讨论】:

      【解决方案3】:

      你可以在upload.php的顶部添加这些行

      $name=$_FILES['userfile']['name']; 
      $ext=substr($name,-3);
      if(strlen($name)>8 || $ext!='pdb') 
      { 
      echo 'file name is either more than 4 character or the extension is not supported'; 
      exit; 
      }
      

      这将检查文件名是否小于或等于 8 个字符(文件名 1 的 4 个字符 . 和扩展名的 3 因此 4+1+3)

      您也可以通过 javascript 进行验证

      <script type="text/javascript">
              function validate()
      {
          var flag=true;
          var fullName=document.getElementById('userfile').value;
          file=fullName.match(/([^\/\\]+)$/g);
          ex=file[0].match(/[^.]+$/);
          if(file[0].length>8 || ex!='pdb')
          {
              alert('file Name or extension not supported');
              flag=false;
          }
      
          return flag;
      }
      </script>
      <form action="chainresult.php" method="post" enctype="multipart/form-data" onSubmit="return validate();" >
         <div>  Upload a PDB file :  <br />
         <input type="hidden" name="MAX_FILE_SIZE" value="10485760"/>
         <input type="file" name="userfile" id="userfile" size="50000000" /><br />
         <input type="submit" value="GET SEQUENCE" />  </div>
      </form>
      

      【讨论】:

      • 这解决了问题。显示错误。谢谢,但它仍在接受文件。
      • 但它不会上传它。如果您想验证文件名而不将其发送到upload.php,那么您可以使用javascript(注意:使用javascript 不是确定的方法,因为用户可以轻松关闭javascript 并绕过验证)
      猜你喜欢
      • 2013-03-03
      • 2011-12-04
      • 2013-05-26
      • 2011-09-04
      • 1970-01-01
      • 2016-05-01
      • 2010-12-05
      • 2014-09-24
      • 2015-02-15
      相关资源
      最近更新 更多