使用php检查文件大小和类型
我的任务是制作一个php文件,用于将文件上载到目录。只有当文件大小小于512kb且文件类型为txt、zip或jpg时,用户才能上载文件。我的代码工作不正常,因为如果文件不相关,它会忽略输出,并且也不会正确检查文件类型。有人能帮忙吗使用php检查文件大小和类型,php,html,Php,Html,我的任务是制作一个php文件,用于将文件上载到目录。只有当文件大小小于512kb且文件类型为txt、zip或jpg时,用户才能上载文件。我的代码工作不正常,因为如果文件不相关,它会忽略输出,并且也不会正确检查文件类型。有人能帮忙吗 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Files</title> </head> <body
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Files</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="dat">
<input type="submit" value="Upload">
<div>(max. size: 512kb, Type: jpg,txt,zip)</div>
</form>
<?php
if(isset($_FILES["dat"])){
$file=$_FILES["dat"];
$name=$file["name"];
$size=$file["size"];
$location=$file["tmp_name"];
$location_file=$location . basename($name);
if($size>512000 or $location_file!="txt" or $location_file!="zip" or $location_file!="jpg"){
echo "The file is too big or the format is not correct...";
}
else{
move_uploaded_file($location,"files/".$name);
}
}
?>
</body>
</html>
文件夹
(最大尺寸:512kb,类型:jpg,txt,zip)
对于格式,您需要从文件名中取出扩展名,如下所示:
$explode=explode(“.”,$name);
$extension=$explode[sizeof($explode)-1]//返回“txt”、“zip”或任何内容
if(!in_数组($extension,[“zip”,“txt”,“jpg”,“jpeg”])){
//格式错误:格式不正确
}否则{
//格式确定
$finfo=finfo\u open(FILEINFO\u MIME\u类型);
$mime=finfo_文件($finfo,$_文件['dat']['tmp_名称]]);
$allowed\u mime\u类型=[
“图片/jpg”,
“图像/jpeg”,
“应用程序/zip”,
“纯/文本”
];
if(!in_数组($mime,$allowed_mime_类型)){
//错误格式
}否则{
//格式确定
}
}
首先尝试调试上载的文件。其次,不要依赖文件名,因为它很容易被欺骗。
tmp_name为您提供文件的临时位置,它将是一个随机字符串。
您最好的选择是在tmp_名称上调用getimagesize
,用于图像,finfo_open
或new-finfo
用于其他文件类型以比较其mime类型,您还可以分解该名称并使用end
,这也将为您提供扩展名。可以定义一个已接受扩展名的数组,并在_array
中使用检查扩展名是否有效。
将提供示例代码后,我得到一台电脑
LE:正如承诺的那样,使用注释和安全概念进行更复杂的检查
html端的
<input type="file" name="dat" accept=".txt, .zip, .jpg">
在服务器端:
<?php
$extension = array_pop(explode(".", $_FILES["dat"]["name"])); // return file extension
if(in_array($extension, array("zip", "txt", "jpg"))) // check if extension is valid
{
if($_FILES['dat']['size'] > 512*1024) // check file size is above limit
{
echo "File size above limit";
}
else
{
move_uploaded_file($_FILES['dat']['tmp_name'],"files/".$_FILES['dat']['name']); // moving uploaded file
}
}
else
{
echo "Invalid file type";
}
我的php有点生疏,但首先,我想$location\u file
包含的不仅仅是文件扩展名,因此将其与扩展名进行比较总是返回false。你试过调试吗?确保不要在生产中使用这段代码,因为它很容易出现空字节注入,而且仅仅检查扩展是件坏事,这也会导致更多的安全问题
<?php
$extension = array_pop(explode(".", $_FILES["dat"]["name"])); // return file extension
if(in_array($extension, array("zip", "txt", "jpg"))) // check if extension is valid
{
if($_FILES['dat']['size'] > 512*1024) // check file size is above limit
{
echo "File size above limit";
}
else
{
move_uploaded_file($_FILES['dat']['tmp_name'],"files/".$_FILES['dat']['name']); // moving uploaded file
}
}
else
{
echo "Invalid file type";
}