php问题检查pics格式

时间:2009-07-18 20:03:21

标签: php

我有问题检查图片格式代码:

// 0 means a successful transfer
if ($_FILES["fname"]["error"] > 0) {
    $_FILES["fname"]["name"] = "holder.jpg";        // line 3
    $imgData = $hyperlink.$_FILES["fname"]["name"]; // line 4
} else {
    $imgData = $hyperlink.$_FILES["fname"]["name"];
}

// Only accept files of jpeg format
$img = substr($imgData, 37);
$_FILES["fname"]["type"] = $img;

print "****";

print $_FILES["fname"]["type"];

//print $img;

print "****";

// only accept jpg images pjpeg is for Internet Explorer.. should be jpeg
if (!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")) {
    print "I only accept jpg files!"; 
    exit(0);
}

它始终转到第一个if声明(第3行和第4行)。如果我没有上传图片,当它转到if语句检查格式时它会给我我只接受jpg文件。我猜它接受它作为字符串,所以它说我只接受jpg文件

2 个答案:

答案 0 :(得分:2)

!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")

相同
!( ($_FILES["fname"]["type"] == "image/pjpeg") && ($_FILES["fname"]["type"== "image/jpg") )

在这种形式下,您可以更好地看到$ _FILES [“fname”] [“type”]永远不能与“image / pjpeg”和“image / jpeg”相等,因此条件始终为真。

答案 1 :(得分:1)

最好检查文件是否真的是一个jpeg,而不是它提交的mime类型是jpeg。查看exif_imagetype()函数或getimagesize()

<?php

  if (exif_imagetype($_FILES['fname']['tmp_name']) != IMAGETYPE_JPEG) {
    echo "Image is not a JPEG!";
    exit;
  }

如果exif_imagetype不可用,getimagesize应该可以工作:

<?php
   if ((list($width, $height, $type, $attr) = getimagesize($_FILES['fname']['tmp_name'])) !== FALSE) {
     if ($type != IMAGETYPE_JPEG) {
       echo "Image is not a JPEG!";
       exit;
     }
   }