在上传的图像保存到数据库之前,我很难获得该图像的MIME类型。我读过很多书和网页,但都找不到答案。
如何确定MIME类型?
这是我目前拥有的代码。我已经删除了确定MIME类型的各种尝试:
$upload_dir = HOST_WWW_ROOT . "uploads/movie_pics/";
$image_fieldname = "movie_pic";
// Name the file uniquely
$now = time();
while (file_exists($upload_filename = $upload_dir . $now .
'-' .
$_FILES[$image_fieldname]['name'])) {
$now++;
}
// Insert the image into the movies_images table
$image = $_FILES[$image_fieldname];
$movie_images_filename = $image['name'];
$movie_images_info = getimagesize($image['tmp_name']);
$finfo = finfo_open();
$movie_images_mime_type = finfo_file($finfo, $upload_filename, FILEINFO_MIME);
finfo_close($finfo);
$movie_images_size = $image['size'];
$movie_images_data = file_get_contents($image['tmp_name']);
$insert_image_sql = sprintf("INSERT INTO movies_images " .
"(movie_images_filename, movie_images_mime_type, movie_images_file_size, movie_images_data) " .
"VALUES ('%s', '%s', %d, '%s');",
mysql_real_escape_string($movie_images_filename),
mysql_real_escape_string($movie_images_mime_type),
mysql_real_escape_string($movie_images_size),
mysql_real_escape_string($movie_images_data));
mysql_query($insert_image_sql)
或死亡(mysql_error());
在finfo_file的手动页面中,示例将常量FILEINFO_MIME_TYPE传递给finfo_open,而不是finfo_file。
$finfo = finfo_open(FILEINFO_MIME);
$movie_images_mime_type = finfo_file($finfo, $upload_filename);
如果您确定只处理图像,则可以使用exif_imagetype()
。
下面的代码将把文件与特定的IMAGE类型进行比较。然后,它使用image_type_to_mime_type()
使用$image_type中存储的图像类型来检索文件的mime类型。
示例1(从上面的链接中提取)
// if file is a GIF line below should return IMAGETYPE_GIF
$image_type = exif_imagetype('image.gif');
if ($image_type == IMAGETYPE_GIF) {
$mime = image_type_to_mime_type(); // will produce "image/gif" as String.
echo 'The picture is a gif, with a mime type of ' . $mime;
}
不要将mysql_*用于新代码
此外,建议不要再为新代码使用mysql_*函数,因为它已被弃用。我建议查看mysqli_*或MySQL查询的PDO形式。