Bir dosya mp3 veya görüntü dosyası ise PHP nasıl kontrol edebilirim?

7 Cevap php

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?

7 Cevap

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;
}

try mime_content_type()

<?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; 

}