可能的重复项:
如何限制<输入类型>使其只能选择.pdf文件? 输入类型>
我的上传表单是
<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",我该如何实现?
上传.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;
} ?>
你有一个选择。 上传文件时,会为其指定一个临时名称并存储在 TEMP 中,然后在批准后 - 根据您的代码 - 移动并赋予上传名称(默认情况下(或您规定的 4 个字母。 这是更大的问题...覆盖?4个字母不允许你太多的多样性 - 如果你在米奇软件上......哎呀!如果您在 Linux 上将大小写转录为较低(首选(,检索可能会非常混乱。
与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);
您可以在上传的顶部添加这些行.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 个字符(文件名 4 个字符 1 的 . 和扩展名的 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>