Esiste una mappatura rapida e sporca dei tipi MIME alle estensioni in PHP che posso utilizzare?Come si determinano le estensioni associate a un tipo MIME in PHP?
risposta
Non built-in, ma non è terribilmente difficile da rotolare il proprio:
function system_extension_mime_types() {
# Returns the system MIME type mapping of extensions to MIME types, as defined in /etc/mime.types.
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
foreach($parts as $part)
$out[$part] = $type;
}
fclose($file);
return $out;
}
function system_extension_mime_type($file) {
# Returns the system MIME type (as defined in /etc/mime.types) for the filename specified.
#
# $file - the filename to examine
static $types;
if(!isset($types))
$types = system_extension_mime_types();
$ext = pathinfo($file, PATHINFO_EXTENSION);
if(!$ext)
$ext = $file;
$ext = strtolower($ext);
return isset($types[$ext]) ? $types[$ext] : null;
}
function system_mime_type_extensions() {
# Returns the system MIME type mapping of MIME types to extensions, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
if(!isset($out[$type]))
$out[$type] = array_shift($parts);
}
fclose($file);
return $out;
}
function system_mime_type_extension($type) {
# Returns the canonical file extension for the MIME type specified, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
#
# $type - the MIME type
static $exts;
if(!isset($exts))
$exts = system_mime_type_extensions();
return isset($exts[$type]) ? $exts[$type] : null;
}
Penso che questa sia una vecchia risposta. Ora dovresti usare 'fileinfo' http://www.php.net/manual/en/ref.fileinfo.php –
@ JorgeB.G. Ciò richiede che il file esista, non è vero? – danronmoon
@danronmoon. si lo fa – Qix
Se si desidera utilizzare un webservice, Ho appena creato questa come parte del mio tipo MIME < -> Servizio icona
Ad esempio:
Funziona su Appengine quindi dovrebbe avere alta disponibilità.
-1; non è necessario utilizzare un servizio Web per questo quando può essere realizzato localmente, non consente il mapping di tipi MIME * a * estensioni (cosa richiesto dall'OP), e il servizio web così com'è attualmente manca estensioni che il mio locale Il file 'mime.types' su una normale installazione di Ubuntu comprende, come' .woff'. –
Navigare su http://stdicon.com genera un errore per me. Link a pastebin: http://pastebin.com/BjkGRv7H. Vale la pena notare che il servizio stesso funziona bene però. – starbeamrainbowlabs
Si potrebbe utilizzare mime_content_type
ma è deprecato. Utilizzare fileinfo
invece:
function getMimeType($filename) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mime;
}
Vale la pena notare che l'OP ha effettivamente chiesto di associare i tipi MIME * alle * estensioni di file. Questo copre ancora il caso d'uso più comune (e probabilmente quello con il quale l'OP si trovava di fronte), quindi sicuramente merita di esistere e l'ho + 1ed, ma non è * rigorosamente * una risposta alla domanda che è stata posta come pedante interpretato. –
Nota: 'finfo_file()' e 'mime_content_type()' richiede che il file esista. – Pang
Dove dice che è deprecato? – Greg
Se si lavora con vari estensioni limitate di immagini e hanno bisogno di qualcosa di molto semplice, credo che questo sia sufficiente.
switch($info['mime'])
{
case 'image/gif' : $extension = 'gif'; break;
case 'image/png' : $extension = 'png'; break;
case 'image/jpeg' : $extension = 'jpg'; break;
default :
throw new ApplicationException('The file uploaded was not a valid image file.');
break;
}
Si potrebbe desiderare di utilizzare questa libreria: utilizzo https://github.com/ralouphie/mimey
Esempio:
$mimes = new \Mimey\MimeTypes;
// Convert extension to MIME type:
$mimes->getMimeType('json'); // application/json
// Convert MIME type to extension:
$mimes->getExtension('application/json'); // json
Questo perché a quanto pare la qualità delle funzioni PHP di cui è dubbia.
usano questo file: https://github.com/ralouphie/mimey/blob/develop/mime.types.php
come questo:
$mimes=include('mime.types.php');
o copiare il contenuto:
$mime= array (
'mimes' =>
array (
'ez' =>
array (
0 => 'application/andrew-inset',
),
'aw' =>
array (
0 => 'application/applixware',
),
'atom' =>
array (
0 => 'application/atom+xml',
),
'atomcat' =>
array (
0 => 'application/atomcat+xml',
)
...
e un esempio di ottenere da un flusso:
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mime=$finfo->buffer($data);
$mimes=include(__DIR__."/mime.types.php");
echo ($mime); //mime
echo ($mimes['extensions'][$mime]); // file extension
- 1. Come impostare un tipo mime su un file con php?
- 2. Accesso a Mime-Type di Apache Mapping di estensioni
- 3. Rilevamento del tipo MIME in PHP
- 4. tipo MIME per le directory in Android
- 5. Come si ottiene l'icona, il tipo MIME e l'applicazione associata a un file sul desktop Linux?
- 6. Come si determinano i colori bash ls?
- 7. come ottenere il tipo reale/tipo mime in JAVA (come finfo \ mime_content_type in PHP)?
- 8. MIME Tipo spoofing
- 9. Come modificare le proprietà associate a RelativePanel in App Windows?
- 10. "Visualizza come tipo MIME" in Chrome o Firefox
- 11. Quale tipo MIME utilizzare come scopo generale?
- 12. Esiste un tipo MIME "predefinito"?
- 13. MSOFFICE tipo MIME verifica
- 14. impostazione tipo MIME in asp.net
- 15. Caricamento file: come escludere un tipo MIME usando gli asserti?
- 16. Ottieni aree associate a un progetto MVC
- 17. Come si ottiene il tipo MIME di un file richiesto in ASP.NET C#?
- 18. Quali sono le differenze pratiche tra le matrici "associate" e "indicizzate" in PHP?
- 19. Converti il tipo MIME nel file Estensione PHP
- 20. Come ottenere il tipo MIME di file caricato a Jersey
- 21. Registrati nuovo tipo mime in android
- 22. Come posso usare .htaccess per nascondere le estensioni URL .php?
- 23. Quale tipo MIME dovrei usare per mp3
- 24. Come si restituisce un FileResult in ASP.NET senza conoscere il tipo MIME?
- 25. Chrome si rifiuta di eseguire uno script AJAX a causa di un tipo MIME errato
- 26. Come gestire il tipo MIME nel tornado?
- 27. tipo MIME corretto per .mp4
- 28. Tipo MIME per codice shader
- 29. tipo Mime mancante per .rar e .tar
- 30. Come recuperare entità associate a Hibernate
Peo volendo semplicemente mappare * estensioni * a * tipi MIME *, piuttosto che il contrario, si dovrebbe notare che ora c'è un supporto integrato per questo da cui dovrebbero trarre vantaggio - vedi [risposta di Jorge] (http: // stackoverflow.com/a/20494035/1709587) piuttosto che accettato. –
@MarkAmery tuttavia come indicato, finfo_file() richiede che il file esista. Quale non è sempre il caso. La risposta del caos è ancora più pertinente al PO e ancora valida 8 anni dopo. – Wranorn