2014-02-20 3 views
6

Hallo, ich suche nach dem besten Weg, um MIME-Typ in PHP für jede lokale Datei oder URL zu finden. Ich habe versucht, mime_content_type Funktion von PHP, aber da es veraltet ist suche ich bessere Lösung in PHP für alle Dateiformate.Finden Mime Art der Datei oder URL mit PHP für alle Dateiformat

mime_content_type — Detect MIME Content-type for a file ***(deprecated)*** 

ich schon unten Funktion

echo 'welcome'; 
if (function_exists('finfo_open')) { 
    echo 'testing'; 
    $finfo = finfo_open(FILEINFO_MIME); 
    $mimetype = finfo_file($finfo, "http://4images.in/wp-content/uploads/2013/12/Siberian-Tiger-Running-Through-Snow-Tom-Brakefield-Getty-Images-200353826-001.jpg"); 
    finfo_close($finfo); 
    echo $mimetype; 
} 

Above Code versucht habe, ist nicht für mich arbeiten, ich nur sehe welcome für output.I nicht sicher ist, ob ich etwas falsch hier tue.


Unten Code funktioniert irgendwie in meinem lokalen, aber es funktioniert nicht für URLs.

$file = './apache_pb2.png'; 
$file_info = new finfo(FILEINFO_MIME); // object oriented approach! 
$mime_type = $file_info->buffer(file_get_contents($file)); // e.g. gives "image/jpeg" 
$mime = explode(';', $mime_type); 
print $mime[0]; 

Gibt es eine Arbeit, um die beiden arbeiten für (url und lokal) .was die beste Praxis ist MIME-Typ für alle Inhalte einzustellen (Bild, Video, Datei usw.) als mime_content_type Funktion in PHP. es wird auch empfohlen, die Funktion mime_content_type in PHP zu verwenden. Ist es die beste Vorgehensweise in PHP?

Antwort

5

die Antwort gefunden,

Um die Erweiterung der Datei beste Weg ist, zu finden path_info für lokale Dateien und URL zu verwenden.

$info  = pathinfo($filename); 

$basename = $info['basename']; 

$ext  = $info['extension']; 

ein Array für den Typ mime erstellen

$mimeTypes = array("mp4" => "video/mp4");// ->See Example here und Here

//get the mime type for file 
$type = isset($this->mime_types[$ext]) ? $this->mime_types[$ext] : "application/octet-stream"; 

Above Code sowohl für URL und lokale Dateien funktioniert.

Hinweis:

kämpfen Diejenigen mit CDN mp4 video Mime-Typ Video/mp4 Ausgabe - ich hatte eine Veränderung in meinem class.s3.php Datei gemacht -> in mime_type [] Array und auch Kreuz mit putObject() Funktion überprüft.

Einstellung der Mime-Typ ist immer bei der Codierung Seite erfolgen und nicht in AWS S3 Eimer, müssen wir AWS PHP Class file or sdk verwenden, um die Manipulation in MIME-Typ zu tun oder die notwendigen Änderungen in den Kern Klasse -Datei (z. B. Klasse. s3.php)

+2

Ok, und was hast du gemacht, wenn der Link wie folgt aussieht "https://avatars2.githubusercontent.com/u/124070?v=3&s=400"? Es gibt keine Erweiterung darin! – alexglue

10

Verwenden Sie file_info in PHP mit FILEINFO_MIME_TYPE Flag als Parameter.

[Beispiel genommen, wie es von PHP Manual ist]

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    echo finfo_file($finfo, $filename) . "\n"; 
} 
finfo_close($finfo); 
?> 

OUTPUT :

text/html 
image/gif 
application/vnd.ms-excel 

EDIT :

Sie benötigen die Erweiterung auf Ihrem PHP.ini

;extension=php_fileinfo.dll 

Entfernen Sie das Semikolon aus dieser Zeile und starten Sie Ihren Web-Server zu ermöglichen, und Sie sind gut zu gehen.
Installation Doc.

+0

Danke für die schnelle Antwort :) Ich habe die Frage bearbeitet, ich hatte die gleiche Funktion versucht und es hat nicht funktioniert.Ich bin mir nicht sicher warum !!! kein Fehler kommt !!! @Shankar – Hitesh

+0

@hitesh prüfen, welche Version von PHP haben Sie –

+0

@hitesh, Überprüfen Sie die bearbeitete Antwort. –

3
$type = image_type_to_mime_type(exif_imagetype($file)); 
+0

Hallo Danke für die Antwort aber ich denke http://www.php.net/manual/en/function.image-type-to-mime-type.php [image_type_to_mime_type] und [exif_imagetype] [http: // www. php.net/manual/en/function.exif-imagetype.php] funktioniert nur für Bilder, nicht für andere Dateien wie Videos oder Dokumente. Haben Sie eine Lösung dafür? – Hitesh

+1

ja, du hast Recht. – lbsweek

+0

hmmm hab ich mir trotzdem gedacht danke für die antwort !!! es war hilfreich zumindest für Bilder :) – Hitesh

2

Nachdem ich vor allem, dass diese Lösungen ausprobiert, was ich verwenden:

$command = "file -i {$filename}";

$mimeTypeArr = shell_exec($command);

Dieser Befehl gibt die folgende Zeile:

filename: mime_type

Nachdem ich dies habe ich explodieren und das bekommen, was ich brauche.

$mimeTypeArr = shell_exec($command);

$mimeTypeArr = explode(':', $mimeTypeArr);

$mimeType = trim($mimeTypeArr[1]);

Hoffe, es hilft!

+0

Sie können 'file -b -i' verwenden, um das Parsen zu vermeiden: mit' -b' werden Dateinamen nicht zur Ausgabe von Zeilen vorangestellt . –