0

这是我的代码:

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

4 回答 4

1

不要相信哑剧类型。如果您想非常确定,请打开文件,读取前几个字节,然后检查它是否是 JPEG 文件头。

如果您想真正确定,请使用imagecreatefromjpeg实际加载 jpeg 文件。如果这失败了,那么它显然不是一个真正的 jpeg 文件,不管 mime 类型和文件头告诉你什么。请注意,您需要有GD可用的权限才能使用此功能。

于 2012-12-08T00:02:25.450 回答
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.";
}
于 2012-12-08T01:05:28.843 回答
0

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

信息直接来自 PHP 的 api。

于 2013-07-29T15:38:07.760 回答
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

于 2012-12-08T01:24:28.497 回答