检查图像是否为JPEG

时间:2009-07-17 02:44:36

标签: php image

我需要检查给定图像是否为JPEG。

if ($_FILES["fname"]["error"] > 0) {
    $imgData = "hyperlink/holder.jpg";
} else {
    $imgData ="hyperlink/" . $_FILES["fname"]["name"];
}
// Only accept jpg images
// pjpeg is for Internet Explorer should be jpeg
if (!($_FILES["fname"]["type"] == "image/pjpeg") ) {
    print "I only accept jpg files!";
    exit(0);
}

当它转到第一个if语句中的第一个语句时,它总是给我只接受jpg文件!

我该如何解决?

6 个答案:

答案 0 :(得分:22)

尝试使用exif_imagetype图像功能。

示例:

if(exif_imagetype($filepath) != IMAGETYPE_JPEG){
    echo 'Not a JPEG image';
}

答案 1 :(得分:3)

PHP具有如此良好的图像类型支持,我想知道为什么要限制你的应用程序。在几行代码中,您可以处理任何输入格式并转换为jpeg,如果这是一个要求......

$im = imagecreatefrompng(input_filename)
imagejpeg($im, output_filename);

答案 2 :(得分:2)

我相信以下工作:

另请注意:

  

(exif_imagetype($ ImagePathAndName)== IMAGETYPE_JPEG)

只读取寻找图像标题的前几个字节,因此不足以确认图像是否已损坏。

下面我在逻辑“和”声明中提到它,即必须传递这两个测试,以使图像有资格成为有效且无损的等等:

if ((exif_imagetype($ImagePathAndName) == IMAGETYPE_JPEG) && (imagecreatefromjpeg( $ImagePathAndName ) !== false ))
{
echo 'The picture is a valid jpg<br>';
}

注意:您需要将这行代码放在php代码的顶部,以避免在遇到伪造/损坏的图像文件时看到来自imagecreatefromjpeg($ ImagePathAndName)的警告消息。

ini_set(‘gd.jpeg_ignore_warning’, 1);

答案 3 :(得分:1)

带有此代码的

Check the mime(多用途Internet邮件扩展)类型的文件。并验证您所需的类型。您还可以使用此代码检测png,gif。

 if($_FILES["fname"]["type"] == "image/jpeg")
  {
      echo "File type is JPEG";
  }

答案 4 :(得分:0)

使用$_FILES时,您依赖于客户端发送的信息,这不是最好的事情(您已经看到它并不总是相同的,如果我没记错的话,{{1可以是假的。

如果您使用的是PHP&gt; = 5.3(或者可以安装PECL软件包),也许您可​​以查看扩展名Fileinfo。如果您使用的是旧版本,那么mime_content_type呢?

而且,正如斯科特所说,为什么只允许jpeg?

更好地查看代码:当您处于第一种情况($_FILES['...']['type'])时,您要将默认文件分配给error > 0?为什么“超链接”周围的空间? 为什么你总是用来检查$imgData,即使之前有几行错误?

要完成,您是否看过手册(Handling file uploads)?

答案 5 :(得分:0)

为什么不尝试创建一系列例外(您希望用户能够上传的文件)。

// Hyperlink for your website
$hyperlink = "http://www.yourwebsitehere.com";

if($_FILES['fname']['error'] > 0)
{
    $image= $hyperlink . "/holder.jpg";
} 
else
{
    $image = $hyperlink . "/" . $_FILES['fname']['name'];
}

// Only accept files of jpeg format
$exceptions = array("image/jpg", "image/jpeg", "image/pjpeg");

foreach($exceptions as $value)
{
    if($_FILES['fname']['type'] != $value)
    {
        echo "I only accept jpeg images!";
        break; // Or exit();
    }
}