2012-12-07 87 views
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,我不断收到回音,这不是:

“您尝试上传文件的类型:图像/ JPEG ...该文件必须是JPEG。”

只是有没有办法,除非该文件不是JPEG是echo语句应该永远被执行。

+1

什么是您的JPEG文件类型?当你尝试时你的脚本会回应什么?我在代码示例中看不到if/else约束。 – chrki

+0

我的JPEG文件类型是什么? ... JPEG? ......唯一重要的规则是'!='...并且即使它是JPEG格式,也正在执行回显。 – dcolumbus

+0

......来PeeHaa – dcolumbus

回答

1

不要相信MIME类型。如果你想确定,打开文件,读取前几个字节,并检查它是否是JPEG文件头。

如果你想成为真的很肯定的是,使用imagecreatefromjpeg实际读取JPEG文件。如果失败了,那么它显然不是一个真正的jpeg文件,无论mime类型和文件标题告诉你什么。请注意,您需要有GD才能使用此功能。

+0

什么是故障安全读取文件头的方式?无论使用什么浏览器等都可以工作。 – dcolumbus

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."; 
} 
0

,这是不安全的依靠MIME类型或$_FILES阵列中给出的文件名,因为它们是由浏览器给出。

使用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的文档。

0

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

直接从PHP的API的信息。