Функция wp_check_filetype_and_ext()
используется для проверки типа загружаемого файла в WordPress. Она определяет MIME-тип файла и сравнивает его с расширением, чтобы удостовериться, что файл действительно соответствует заявленному типу. Эта проверка важна для защиты сайта от загрузки файлов с поддельными расширениями или потенциально опасных данных.
Если тип файла и расширение не совпадают, функция может предложить исправленное имя файла с правильным расширением через параметр proper_filename
.
wp_check_filetype_and_ext( string $file, string $filename, string[]|null $mimes = null ): array
Аргументы
- $file (строка, обязательный): Полный путь к физическому файлу.
- $filename (строка, обязательный): Имя файла, которое может отличаться от пути к файлу.
- $mimes (массив строк, необязательный): Массив допустимых MIME-типов. Если не указано, будет использоваться список по умолчанию из
get_allowed_mime_types()
.
Возвращаемые значения
Функция возвращает массив с результатами проверки:
- ext (строка или
false
): Расширение файла. - type (строка или
false
): MIME-тип файла. - proper_filename (строка или
false
): Исправленное имя файла, если расширение не совпадает с реальным типом.
Проверка изображения после загрузки
Предположим, вы загружаете изображение с внешнего ресурса и хотите убедиться, что оно действительно является изображением:
$file_url = 'https://example.com/path/to/image.jpg';
// Для работы функций download_url() и wp_check_filetype_and_ext() нужно подключить соответствующий файл:
require_once ABSPATH . 'wp-admin/includes/file.php';
// Загружаем временный файл из внешнего источника
$tmp_file = download_url($file_url);
if (!is_wp_error($tmp_file)) {
// Проверяем MIME-тип файла и его расширение
$result = wp_check_filetype_and_ext($tmp_file, 'image.jpg');
if (!empty($result['ext'])) {
echo "Файл проверен. Расширение: " . $result['ext'];
} else {
echo "Ошибка: файл не прошел проверку.";
}
}
В этом примере мы загружаем изображение, а затем проверяем, что MIME-тип соответствует расширению. Если имя файла указано неверно, функция предложит правильное расширение.
Обработка файлов с возможным неправильным расширением
Рассмотрим сценарий, когда вы загружаете изображение с расширением .png
, но файл на самом деле является JPEG:
$file_url = 'https://example.com/path/to/incorrect.png';
$tmp_file = download_url($file_url);
if (!is_wp_error($tmp_file)) {
$check = wp_check_filetype_and_ext($tmp_file, 'incorrect.png');
if (!empty($check['proper_filename'])) {
// Имя файла исправлено
echo "Имя файла исправлено: " . $check['proper_filename'];
} else {
// Имя файла не требует изменений
echo "Файл корректный: " . $check['ext'];
}
}
Если загружаемый файл имеет неправильное расширение (например, файл JPEG с расширением .png
), функция предложит исправленное имя файла.
Дополнительная информация
- Функция используется в следующих сценариях:
wp_handle_sideload()
wp_handle_upload()
media_handle_sideload()
media_handle_upload()
- и других функциях для обработки загрузки файлов.
- Важно отметить, что для проверки изображения используется функция
wp_get_image_mime()
. Для других типов файлов используется функцияfinfo_file()
.
Пример с дополнительными MIME-типами
Если вы хотите добавить свои собственные типы файлов для проверки:
$mimes = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'pdf' => 'application/pdf',
);
$file = 'path/to/uploaded/file.pdf';
$filename = 'document.pdf';
// Проверяем загружаемый файл на соответствие MIME-типам
$result = wp_check_filetype_and_ext($file, $filename, $mimes);
if ($result['ext']) {
echo "Файл соответствует допустимому MIME-типу: " . $result['type'];
} else {
echo "Файл не прошел проверку.";
}
Заключение
Функция wp_check_filetype_and_ext()
полезна для проверки соответствия MIME-типа и расширения файлов, что помогает избежать загрузки потенциально опасных или некорректных файлов на сайт WordPress. Это важный инструмент для обеспечения безопасности при работе с файлами на вашем сайте.