функция since 4.7.1

wp_get_image_mime()

Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.

Сигнатура

wp_get_image_mime( string $file ): string|false

Описание

Для определения реальных MIME-типов это зависит от exif_imagetype() или getimagesize().

Оригинал (английский)

This depends on exif_imagetype() or getimagesize() to determine real mime types.

Параметры

$file string обязательный
Полный путь к файлу.

Возвращаемое значение

string|false

Исходный код

wp-includes/functions.php:3344

function wp_get_image_mime( $file ) {
	/*
	 * Use exif_imagetype() to check the mimetype if available or fall back to
	 * getimagesize() if exif isn't available. If either function throws an Exception
	 * we assume the file could not be validated.
	 */
	try {
		if ( is_callable( 'exif_imagetype' ) ) {
			$imagetype = exif_imagetype( $file );
			$mime      = ( $imagetype ) ? image_type_to_mime_type( $imagetype ) : false;
		} elseif ( function_exists( 'getimagesize' ) ) {
			// Don't silence errors when in debug mode, unless running unit tests.
			if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) {
				// Not using wp_getimagesize() here to avoid an infinite loop.
				$imagesize = getimagesize( $file );
			} else {
				$imagesize = @getimagesize( $file );
			}

			$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;
		}

		/*
		 * Add WebP fallback detection when image library doesn't support WebP.
		 * Note: detection values come from LibWebP, see
		 * https://github.com/webmproject/libwebp/blob/master/imageio/image_dec.c#L30
		 */
		$magic = bin2hex( $magic );
		if (
			// RIFF.
			( str_starts_with( $magic, '52494646' ) ) &&
			// WEBP.
			( 16 === strpos( $magic, '57454250' ) )
		) {
			$mime = 'image/webp';
		}

		/**
		 * Add AVIF fallback detection when image library doesn't support AVIF.
		 *
		 * Detection based on section 4.3.1 File-type box definition of the ISO/IEC 14496-12
		 * specification and the AV1-AVIF spec, see https://aomediacodec.github.io/av1-avif/v1.1.0.html#brands.
		 */

		// Divide the header string into 4 byte groups.
		$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 {
				/*
				 * HEIC/HEIF images and image sequences/animations may have other strings here
				 * like mif1, msf1, etc. For now fall back to using finfo_file() to detect these.
				 */
				if ( extension_loaded( 'fileinfo' ) ) {
					$fileinfo  = finfo_open( FILEINFO_MIME_TYPE );
					$mime_type = finfo_file( $fileinfo, $file );

					if ( PHP_VERSION_ID < 80100 ) { // finfo_close() has no effect as of PHP 8.1.
						finfo_close( $fileinfo );
					}

					if ( wp_is_heic_image_mime_type( $mime_type ) ) {
						$mime = $mime_type;
					}
				}
			}
		}
	} catch ( Exception $e ) {
		$mime = false;
	}

	return $mime;
}

История изменений

ВерсияОписание
6.7.0 Added support for HEIC images.
6.5.0 Added support for AVIF images.
5.8.0 Added support for WebP images.
4.7.1 Introduced.

Что будем искать? Например,Продвижение

Этот сайт использует куки-файлы. Оставаясь на сайте, Вы соглашаетесь на их использование. Для получения дополнительной информации, пожалуйста, ознакомьтесь с политикой в отношении персональных данных.