0

为什么下面没有识别出正在上传的图像(.jpg)?

我收到上传的文件不是图片!!!

$finfo = finfo_open(FILEINFO_MIME_TYPE, 'C:\xampp\php\extras\magic\magic.mime');
if(strpos(finfo_file($finfo, $_FILES['userfile']['tmp_name']),"image")===0) {    

  // prepare the image for insertion
  $imgData =addslashes (file_get_contents($_FILES['userfile']['tmp_name']));

  // put the image in the db...
  // database connection
  mysql_connect($host, $user, $pass) OR DIE (mysql_error());

  // select the db
  mysql_select_db ($db) OR DIE ("Unable to select db".mysql_error());

  // our sql query
  $sql = "INSERT INTO uploaded_images
  (image, name)
  VALUES
  ('{$imgData}', '{$_FILES['userfile']['name']}');";

  // insert the image
  mysql_query($sql) or die("Error in Query: " . mysql_error());
  $msg='<p>Image successfully saved in database with id ='. mysql_insert_id().' </p>';
}
else
  $msg="<p>Uploaded file is not an image.</p>";
4

2 回答 2

1

如果您无权访问 GD 库,您可以简单地使用 getimagesize()它,如果它不是图像,则会返回 false。http://php.net/manual/en/function.getimagesize.php

于 2012-11-29T12:13:48.380 回答
0

检测文件类型出奇地不可靠。一些更简单的低级文件类型检测程序只是使用文件扩展名来尝试确定类型。

最好使用专门处理图像的工具,例如imagemagick,如果您有能力将其安装在运行代码的服务器上。这是一个示例,它将告诉您文件是否实际上是 JPEG 图像,而不依赖于文件名:

exec("identify $image_file",$out);
if(!empty($out)){
    $info = $out[0];
    $info = explode(' ',$out[0]);
    $type = $info[1];
    if($type == 'JPEG'){
        return true;
    }
}

但是,如果您无权安装 imagemagick,您可以使用 GD 库。否则,您要么必须相信文件扩展名是正确的,要么只相信文件是图像。

在单独的说明中,将图像保存在数据库中很少是一个好主意,尤其是当它们作为渲染图像交付时。MySQL 的设计并不是为了高效。最好将它们作为文件存储在可以公开查看的目录中。话虽如此,我不知道您的申请,因此您将最适合确定最佳行动方案。

于 2012-11-29T11:51:22.140 回答