Bir dosya her olası uzantısını kontrol dışında bir mp3 dosyası veya görüntü dosyası olup olmadığını nasıl kontrol edebilirim?
Sen getimagesize
a> kullanarak görüntü dosyalarını tespit edebilirsiniz.
MP3 ve diğer ses / video dosyaları hakkında daha fazla bilgi edinmek için, ben php-mp4info getID3() a> tavsiye edilmiştir.
Mimetype almak için yerel yol:
For PHP < 5.3 use mime_content_type()
For PHP >= 5.3 use finfo_fopen()
Alternatifler MimeType exif_imagetype ve getimagesize olarak almak için, ancak bu uygun kütüphaneleri yüklü sahip güveniyor. Buna ek olarak, büyük olasılıkla sadece yerine magic.mime 'de verilen bütün listesinin, görüntü Mimetypes dönecektir.
mime_content_type
PHP5.3 kaldırılır iken, bu sürümün altında çalışıyor. E_STRICT
bile kalktı olma konusunda bir uyarı yükseltmek değil. Eğer sisteminizde mevcut ne hakkında rahatsız etmek istemiyorsanız, sadece bir vekil yönteme dört işlevleri kaydırmak o delegeler mevcut ne olursa olsun işlev çağrısı, örneğin
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;
}
Ben aşağıdaki kaydırma işlevini kullanmak bir dosyanın mime türünü bulmak için:
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;
}
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
Çıktı:
image / gif
metin / düz
Ya da daha iyi kullanımı finfo_file() diğer yoludur deprecated.
Sen 5.3 beri PHP içine inşa edilmiştir Fileınfo modülünü kullanabilirsiniz. Eğer bir PHP sürümü PHP 5.3 daha az kullanıyorsanız, size bir PECL uzantısı olarak yükleyebilirsiniz:
Kurulumdan sonra finfo_file
fonksiyon dosya bilgilerini dönecektir.
PECL uzantısı: http://pecl.php.net/package/fileinfo
PHP Belgeleri: http://www.php.net/manual/en/book.fileinfo.php
Sen finfo Bu gibi kullanabilirsiniz:
$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);
veya finfo takılmamış olması, ya da mim sihirli dosya sadece (bizim 4 sunucular üzerinden 3 düzgün çalışır - tüm özdeş OS ve PHP yükler) - çalışmıyor ile ilgili sorunlar varsa, o zaman (unutmayın Linux'un yerli dosyasını kullanarak deneyin olsa dosya sterilize: Bu örnekte, ben) benim test kodu bir PHP geçici dosya adı olduğu gibi dosya güvenilir olabilir biliyorum:
ob_start();
system('file -i -b '.$filename);
$output = ob_get_clean();
$output = explode("; ", $output);
if (is_array($output)) {
$filetype = trim($output[0]);
}
Sonra tıpkı bir switch deyimi mim dosya türünü pass:
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;
Dosya uzantısı ve mim dayalı bir görüntü olduğunu ve bir tarayıcı uyumlu görüntü ise true döndürür Bu fonksiyon kontrolleri eğer ...
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;
}