这是我的代码:
if ( $_FILES['photo']['type'] != "image/jpeg" )
echo "You attempted to upload a file of type: " . $_FILES['photo']['type'] . " ... The file must be a JPEG.";
正如你所看到的......我的代码正在检查文件类型是否为JPEG ...如果是,则继续,否则,它不会。
但即使类型是JPEG,我也不断得到回声:
“您试图上传类型为:image / jpeg的文件...该文件必须是JPEG。”
除非文件不是JPEG,否则永远不会执行该echo语句。
答案 0 :(得分:1)
不要相信mime类型。如果你想非常确定,打开文件,读取前几个字节,并检查它是否是JPEG文件头。
如果您真的非常确定,请使用imagecreatefromjpeg
实际加载jpeg文件。如果失败了,那么它显然不是真正的jpeg文件,无论mime类型和文件头告诉你什么。请注意,您需要GD
才能使用此功能。
答案 1 :(得分:0)
我使用简单的代码进行文件上传。它实际上检查文件扩展名,而不是mime类型。代码如下 -
function getFileExtention($name) {
$split = explode('.',$name);
$splitCount = count($split) - 1;
return strtolower($split[$splitCount]);
}
if(getFileExtention($_FILES['input']['name'] != "jpg" && getFileExtention($_FILES['input']['name'] != "jpeg") {
echo "You attempted to upload a file of type: " . $_FILES['photo']['type'] . " ... The file must be a JPEG.";
}
答案 2 :(得分:0)
依赖于$_FILES
数组中给出的mime类型或文件名是不安全的,因为它们是由浏览器提供的。
使用finfo_file
代替,它将根据文件的标题/内容在服务器端进行检查:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['input']['tmp_name']);
if ($mimeType != "image/jpeg") {
echo "You attempted to upload a file of type: " . $mimeType . " ... The file must be a JPEG.";
}
finfo_close($finfo);
答案 3 :(得分:0)
使用$ext = pathinfo($_FILES["$key"]['name'], PATHINFO_EXTENSION);
直接来自PHP的API的信息。