wp_get_image_mime() WP 4.7.1

Повертає реальний mime-тип зображення.

Типу зображення в назві довіряти не можна, наприклад, зображення png можна назвати як image.jpg .

Для точного визначення mime використовуються функції PHP:

  • exif_imagetype() – визначення типу зображення;
  • image_type_to_mime_type() – отримання mime-типу для типу зображення, що повертається функціями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype;
  • getimagesize() – Отримання розміру зображення.

Використовується у функції wp_check_filetype_and_ext() ;

Основа для:
wp_check_filetype_and_ext()
1 раз – 0.135771 сек
(гальмо) | 50000 разів – 176.48 сек
(гальмо) |
PHP 7.1.11, WP 4.9.4

Хуків немає.

Повертає

Строку|false. Актуальний mime-тип або false, якщо визначити не вдалося.

Використання

wp_get_image_mime($file);
$file
(рядок) (обов’язковий)
Повний шлях до файлу (зображення).

Приклади

0

#1 Отримаємо mime-тип у картинки у файлах шаблону (скриншота теми)

$screenshot_path = get_template_directory() . '/screenshot.png';
echo wp_get_image_mime($screenshot_path);
//> image/png

список змін

З версії 4.7.1Введено.
З версії 5.8.0Added support for WebP images.

Код wp_get_image_mime() WP 6.0.2

function wp_get_image_mime( $file ) {
	/*
	 * Use exif_imagetype() 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' ) ) {
			// Не може бути помилок, коли в режимі debug, unless running unit tests.
			if ( defined( 'WP_DEBUG' ) && WP_DEBUG
				&&! defined( 'WP_RUN_CORE_TESTS' )
			) {
				// Не використовує wp_getimagesize(), щоб запустити infinite loop.
				$ imagesize = getimagesize ($ file);
			} else {
				// phpcs:ignore WordPress.PHP.NoSilencedErrors
				$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;
		}

		/*
		 * Add WebP fallback detection when image library не support WebP.
		 * Note: відхилення цін від LibWebP, see
		 * https://github.com/webmproject/libwebp/blob/master/imageio/image_dec.c#L30
		 */
		$ Magic = bin2hex ($ Magic);
		if (
			//RIFF.
			( 0 === strpos( $magic, '52494646' ) ) &&
			// WEBP.
			( 16 === strpos( $magic, '57454250' ) )
		) {
			$mime = 'image/webp';
		}
	} catch (Exception $ e) {
		$ mime = false;
	}

	return $mime;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *