在HTML表单中指定文件格式上载

时间:2011-12-28 03:29:49

标签: php html forms

  

可能重复:
  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;  
    }   ?>

3 个答案:

答案 0 :(得分:0)

你可以选择。当文件上传时,它会被赋予临时名称并存储在临时文件中,然后在获得批准后 - 根据您的代码 - 移动并给出上传名称(默认情况下)或4个字母。这是更大的问题......覆盖? 4个字母不允许你多种多样 - 如果你在mickeysoft .... yikes!如果你在Linux上将案例转录为较低版本(首选),那么在检索时可能会非常麻烦。

答案 1 :(得分:0)

您可以在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>

答案 2 :(得分:0)

和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);