Функция WP_GET_IMAGE_MIME() в WordPress 4.7.1
Функция wp_get_image_mime()
помогает определить реальный MIME-тип (тип содержимого) файла изображения.
Зачем это нужно?
Иногда мы не можем доверять названию файла, так как оно может быть неверным. Например, файл с расширением .jpg
может на самом деле быть изображением формата .png
.
Для точного определения MIME-типа используются несколько функций PHP:
exif_imagetype()
— позволяет определить тип изображения.image_type_to_mime_type()
— возвращает MIME-тип на основе типа изображения, который получен с помощью других функций.getimagesize()
— позволяет получить размеры изображения.
Использует:
Функция используется в wp_check_filetype_and_ext()
.
Возвращаемое значение
Функция возвращает строку с MIME-типом или false
, если тип определить невозможно.
Применение
wp_get_image_mime( $file );
Где:
$file
(string) — обязательный параметр, указывающий полный путь к файлу изображения.
Пример использования
$image_path = get_template_directory() . '/screenshot.png';
echo wp_get_image_mime( $image_path ); //> image/png
Изменения
- С версии 4.7.1 функция была добавлена.
- С версии 5.8.0 добавлена поддержка изображений WebP.
- С версии 6.5.0 добавлена поддержка изображений AVIF.
- С версии 6.7.0 добавлена поддержка изображений HEIC.
Код функции wp_get_image_mime()
function wp_get_image_mime( $file ) {
try {
if ( is_callable( 'exif_imagetype' ) ) {
$imagetype = exif_imagetype( $file );
$mime = ( $imagetype ) ? image_type_to_mime_type( $imagetype ) : false;
} elseif ( function_exists( 'getimagesize' ) ) {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) {
$imagesize = getimagesize( $file );
} else {
$imagesize = @getimagesize( $file );
}
$mime = ( isset( $imagesize['mime'] ) ) ? $imagesize['mime'] : false;
} else {
$mime = false;
}
if ( false !== $mime ) {
return $mime;
}
$magic = file_get_contents( $file, false, null, 0, 12 );
if ( false === $magic ) {
return false;
}
$magic = bin2hex( $magic );
if (
( str_starts_with( $magic, '52494646' ) ) &&
( 16 === strpos( $magic, '57454250' ) )
) {
$mime = 'image/webp';
}
$magic = str_split( $magic, 8 );
if ( isset( $magic[1] ) && isset( $magic[2] ) && 'ftyp' === hex2bin( $magic[1] ) ) {
if ( 'avif' === hex2bin( $magic[2] ) || 'avis' === hex2bin( $magic[2] ) ) {
$mime = 'image/avif';
} elseif ( 'heic' === hex2bin( $magic[2] ) ) {
$mime = 'image/heic';
} elseif ( 'heif' === hex2bin( $magic[2] ) ) {
$mime = 'image/heif';
} else {
if ( extension_loaded( 'fileinfo' ) ) {
$fileinfo = finfo_open( FILEINFO_MIME_TYPE );
$mime_type = finfo_file( $fileinfo, $file );
finfo_close( $fileinfo );
if ( wp_is_heic_image_mime_type( $mime_type ) ) {
$mime = $mime_type;
}
}
}
}
} catch ( Exception $e ) {
$mime = false;
}
return $mime;
}
Связанные функции
get_post_mime_type()
wp_get_mime_types()
Изображения
file_is_displayable_image()
image_downsize()
next_image_link()
previous_image_link()
wp_attachment_is_image()
wp_get_attachment_caption()
wp_get_attachment_image()
wp_get_attachment_image_sizes()
wp_get_attachment_image_src()
wp_get_attachment_image_srcset()
wp_get_attachment_image_url()
Эта информация поможет вам лучше понять, как работает функция wp_get_image_mime()
и как использовать её для работы с изображениями в WordPress.