可能重复:
How can I only allow certain filetypes on upload in php?
如何使下面的脚本只允许.jpg图像或.png图像? 它根据会话用户名匹配将映像目录上载到mysql表。是否可以限制文件类型?因为我只需要.jpg或.png
if ($_POST['submit']) {
//get file attributes
$Name = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];
error_reporting(E_ERROR | E_PARSE);
if ($Name) {
$location = "avatars/$Name";
move_uploaded_file($tmp_name, $location ) or die('Failed to upload picture');
$query = mysql_query("UPDATE fgusers3 SET imagelocation='$location' WHERE name='$name'") or die("Your profile image has been uploaded!");
}}
echo "Upload your image below:
<form action='profilepic.php' method='POST' enctype='multipart/form-data'>
Profile Picture: <input type='file' name='myfile'> <input type='submit' name='submit' value='upload'>
</form>";
答案 0 :(得分:1)
您可以尝试使用pathinfo
&amp; exif_imagetype
if(pathinfo($Name,PATHINFO_EXTENSION) != "jpg" || exif_imagetype($Name) != IMAGETYPE_JPEG)
{
// throw error
}
答案 1 :(得分:1)
if($_FILES){
$allowedExtensions = array("jpg","png");
foreach($_FILES as $key=>$val){
if(!empty($val['tmp_name'])){
$ext = end(explode(".",strtolower(basename($val['name']))));
if(in_array($ext,$allowedExtensions)){
$file = 'PATH_TO_UPLOAD'.basename($val['name']);
if(move_uploaded_file($val['tmp_name'],$file)){
//SUCCESS_MESSAGE
}
}else{
//FAIL_MESSAGE
}
}
}
}
答案 2 :(得分:1)
您可以使用exif_imagetype($tmp_name)
根据标题检查文件的实际类型。这会根据文件的内容检查类型,因此它是最可靠的(例如,即使有人为您提供了带有“.png”扩展名的JPG,它也会为您提供正确的信息)。
还有type
属性($_FILES['myfile']['type']
),它将为您提供浏览器声明该文件的MIME类型。但是,如果有人恶意伪造请求,则无法信任。
答案 3 :(得分:0)
$whitelist = array(".jpg",".png");
foreach ($whitelist as $item) {
if(preg_match("/$item\$/i", $_FILES['uploadfile']['name'])) {
$uploaddir='uploads/uploads_image/';
// or code
}
}
答案 4 :(得分:0)
$ imageType = getimagesize($ tmp_name); switch($ imageType ['mime']!=“image / jpg”OR $ imageType ['mim']!=“image / png”){ //这里的错误代码 }
比检查扩展程序更安全,因为扩展程序可以轻松更改。 mime类型也可以改变,但需要更多的知识xD
答案 5 :(得分:0)
当然,您可以通过文件扩展名进行限制,但这不安全。您可以尝试重命名gif文件并上传它。更安全的是使用mime-type来检测文件类型(但仍然无法保证)。看着: How do I find the mime-type of a file with php?
我认为更安全的是尝试获取图像大小或转换为其他图像类型是否成功。