可能重复:
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;
} ?>
答案 0 :(得分:0)
答案 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);