$ _FILES ['input'] ['type']无效?

时间:2012-12-07 23:51:06

标签: php file-upload jpeg

这是我的代码:

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语句。

4 个答案:

答案 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);

有关文档,请参阅http://php.net/manual/en/function.finfo-file.php

答案 3 :(得分:0)

使用$ext = pathinfo($_FILES["$key"]['name'], PATHINFO_EXTENSION);

直接来自PHP的API的信息。