как я могу проверить, является ли файл mp3 файлом или файлом изображения, кроме проверки каждого возможного расширения?
PHP, как я могу проверить, является ли файл mp3 или файлом изображения?
Ответ 1
Вы можете идентифицировать файлы изображений, используя getimagesize
.
Чтобы узнать больше о MP3 и других аудио/видео файлах, мне было рекомендовано php-mp4info getID3().
Ответ 2
Родные способы получения типа mimetype:
Для PHP < 5.3 используйте mime_content_type()
Для PHP >= 5.3 используйте finfo_fopen()
Альтернативы для получения MimeType: exif_imagetype и getimagesize, но они полагаются на наличие соответствующих библиотек. Кроме того, они, скорее всего, просто вернут изображения mimetypes, а не весь список, указанный в magic.mime.
Если вы не хотите беспокоиться о том, что доступно в вашей системе, просто оберните все четыре функции в прокси-метод, который делегирует вызов функции тому, что доступно, например.
function getMimeType($filename)
{
$mimetype = false;
if(function_exists('finfo_fopen')) {
// open with FileInfo
} elseif(function_exists('getimagesize')) {
// open with GD
} elseif(function_exists('exif_imagetype')) {
// open with EXIF
} elseif(function_exists('mime_content_type')) {
$mimetype = mime_content_type($filename);
}
return $mimetype;
}
Ответ 3
Чтобы найти тип mime файла, я использую следующую функцию-обертку:
function Mime($path)
{
$result = false;
if (is_file($path) === true)
{
if (function_exists('finfo_open') === true)
{
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (is_resource($finfo) === true)
{
$result = finfo_file($finfo, $path);
}
finfo_close($finfo);
}
else if (function_exists('mime_content_type') === true)
{
$result = preg_replace('~^(.+);.*$~', '$1', mime_content_type($path));
}
else if (function_exists('exif_imagetype') === true)
{
$result = image_type_to_mime_type(exif_imagetype($path));
}
}
return $result;
}
Ответ 4
попробуйте mime_content_type()
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
Вывод:
изображение/GIF
текст/обычный
Или лучше использовать finfo_file() другой способ устарел.
Ответ 5
getimageinfo лучше всего искать изображения. Проверьте, является ли тип возврата ложным.
Ответ 6
Вы можете использовать модуль FileInfo, который встроен в PHP с 5.3. Если вы используете версию PHP меньше PHP 5.3, вы можете установить ее как расширение PECL:
После установки функция finfo_file
вернет информацию о файле.
Расширение PECL: http://pecl.php.net/package/fileinfo
Документация по PHP: http://www.php.net/manual/en/book.fileinfo.php
Ответ 7
Вы можете использовать finfo следующим образом:
$mime = finfo_open(FILEINFO_MIME, $path_to_mime_magic_file);
if ($mime ===FALSE) {
throw new Exception ('Finfo could not be run');
}
$filetype = finfo_file($mime, $filename);
finfo_close($mime);
или если у вас возникли проблемы с установкой finfo, или файл mime magic просто не работает (он корректно работает на 3 из наших 4 серверов - все идентичные установки ОС и PHP) - затем попробуйте использовать собственный файл Linux (дон Не забудьте очистить имя файла, хотя: в этом примере я знаю, что имя файла можно доверять, так как оно является временным именем PHP в моем тестовом коде):
ob_start();
system('file -i -b '.$filename);
$output = ob_get_clean();
$output = explode("; ", $output);
if (is_array($output)) {
$filetype = trim($output[0]);
}
Затем просто передайте тип файла mime в оператор switch, например:
switch (strtolower($filetype)) {
case 'image/gif':
return '.gif';
break;
case 'image/png':
return '.png';
break;
case 'image/jpeg':
return '.jpg';
break;
case 'audio/mpeg':
return '.mp3';
break;
}
return null;
Ответ 8
Эта функция проверяет, является ли файл изображением на основе расширения и mime и возвращает true, если это совместимое с браузером изображение...
function checkImage($image) {
//checks if the file is a browser compatible image
$mimes = array('image/gif','image/jpeg','image/pjpeg','image/png');
//get mime type
$mime = getimagesize($image);
$mime = $mime['mime'];
$extensions = array('jpg','png','gif','jpeg');
$extension = strtolower( pathinfo( $image, PATHINFO_EXTENSION ) );
if ( in_array( $extension , $extensions ) AND in_array( $mime, $mimes ) ) return TRUE;
else return FALSE;
}
Ответ 9
Для изображений я использую:
function is_image($path)
{
$a = getimagesize($path);
$image_type = $a[2];
if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
{
return true;
}
return false;
}
Ответ 10
Лучший способ - использовать функцию finfo_file. Пример:
<?php
if (isset($_FILES['yourfilename']['tmp_name'])) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['yourfilename']['tmp_name']);
if ($mime == 'image/jpg') {
echo "It an jpg image!";
}
finfo_close($finfo);
}
?>