ファイルがmp3ファイルまたはイメージファイルであるかどうかを、可能な拡張子ごとに確認する以外に、どうすれば確認できますか?
getimagesize
を使用して画像ファイルを識別できます。
MP3やその他のオーディオ/ビデオファイルについて詳しく知るために、 php-mp4infogetID3() 。
MIMEタイプを取得するネイティブの方法:
PHP <5.3の場合 mime_content_type() を使用します
PHP> = 5.3の場合 finfo_fopen() を使用します
MimeTypeを取得する代替手段は exif_imagetype および getimagesize ですが、これらは適切なライブラリがインストールされていることに依存しています。さらに、それらは magic.mime で指定されたリスト全体ではなく、単に画像のMIMEタイプを返す可能性があります。
システムで利用可能なものについて気になりたくない場合は、4つの関数すべてをプロキシメソッドにラップして、関数呼び出しを利用可能なものに委任します。
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;
}
ファイルの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;
}
試してみてください mime_content_type()
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
出力:
画像/ gif
テキスト/プレーン
または、より適切に finfo_file() を使用する方法はdeprecatedです。
getimageinfoは画像を見つけるのに最適です。戻り値の型がfalseかどうかを確認します。
次のように 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マジックファイルが機能しないという問題がある場合(4つのサーバーのうち3つ-すべて同じOSと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;
PHP 5.3以降に組み込まれているFileInfoモジュールを使用できます。PHPより古いバージョンPHP 5.3、PECL拡張機能としてインストールできます。
インストール後、finfo_file
関数はファイル情報を返します。
PECL拡張子: http://pecl.php.net/package/fileinfo
この関数は、ファイルが拡張子と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;
}
最良の方法は、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's an jpg image!";
}
finfo_close($finfo);
}
?>
この関数はファイルパスを取得し、finfo_open
およびmime_content_type
を使用してサポートされている場合は、image
またはvideo
またはaudio
文字列を返します。
/**
* get file type
* @return image, video, audio
*/
public static function getFileType($file)
{
if (function_exists('finfo_open')) {
if ($info = finfo_open(defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME)) {
$mimeType = finfo_file($info, $file);
}
} elseif (function_exists('mime_content_type')) {
$mimeType = mime_content_type($file);
}
if (strstr($mimeType, 'image/')) {
return 'image';
} else if (strstr($mimeType, 'video/')) {
return 'video';
} else if (strstr($mimeType, 'audio/')) {
return 'audio';
} else {
return null;
}
}
画像の場合、次を使用します:
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;
}