¿cómo puedo verificar si un archivo es un archivo mp3 o de imagen, además de verificar cada posible extensión?PHP ¿cómo puedo verificar si un archivo es mp3 o archivo de imagen?
Respuesta
Puede identificar los archivos de imagen usando getimagesize
.
Para saber más acerca de otros archivos de audio/vídeo y MP3, se me ha recomendado
php-mp4info
getID3().
tratar mime_content_type()
<?php
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
Salida:
imagen/gif
text/plain
O mejor uso finfo_file() la otra forma es obsoleta.
Tengo curiosidad por qué esto tiene un voto negativo? Está desaprobado a partir de 5.3 – Gordon
, es por eso que te pregunto – kmunky
Su pregunta específicamente dice que revises el tipo de archivo además de simplemente verificar la extensión del archivo, que es todo lo que mime_content_type hace, básicamente es una serie integrada de extensiones, no tiene idea de qué es realmente el archivo. – TravisO
formas nativas para obtener el tipo MIME:
Para PHP < 5.3 uso mime_content_type()
Para PHP> = 5.3 uso finfo_fopen()
Alternativas para obtener el tipo MIME son exif_imagetype y getimagesize, pero estos se basan en tener el bibliotecas apropiadas instaladas. Además, es probable que solo devuelvan tipos de imagen de mimet, en lugar de la lista completa dada en magic.mime.
Si no desea preocuparse por lo que está disponible en su sistema, simplemente ajuste las cuatro funciones en un método proxy que delegue la llamada de función a lo que esté disponible, p. Ej.
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;
}
Puede utilizar el módulo FileInfo que está integrado en PHP desde 5.3. Si está utilizando una versión PHP inferior a PHP 5.3, puede instalarla como una extensión PECL:
Después de la instalación, la función finfo_file
devolverá la información del archivo.extensión
PECL: http://pecl.php.net/package/fileinfo
PHP Documentación: http://www.php.net/manual/en/book.fileinfo.php
usted podría utilizar finfo así:
$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);
o si tiene problemas con finfo no está instalado, o el archivo de la magia mimo simplemente no funciona (funciona correctamente en 3 de nuestros 4 servidores - todas idénticas instalaciones de SO y PHP) - luego intente usar el archivo nativo de Linux (no se olvide de desinfectar el nombre del archivo): en este ejemplo Le, sé el nombre del archivo se puede confiar ya que es un nombre de archivo temporal PHP en mi código de prueba):
ob_start();
system('file -i -b '.$filename);
$output = ob_get_clean();
$output = explode("; ", $output);
if (is_array($output)) {
$filetype = trim($output[0]);
}
Entonces sólo tiene que pasar el tipo de archivo MIME para una sentencia switch como:
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;
Para encontrar el tipo MIME de un archivo que utilizo la siguiente función de contenedor:
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;
}
getimageinfo es mejor para encontrar imágenes. Verifica si el tipo de devolución es falso.
Esta función comprueba si el archivo es una imagen basada en la extensión y la mímica y devuelve verdadero si se trata de una imagen compatible con el navegador ...
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;
}
Gracias! esto funcionó para mí. – Harsha
para las imágenes, utilizo:
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;
}
La mejor manera es usar la función finfo_file. Ejemplo:
<?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);
}
?>
- 1. ¿cómo puedo verificar si existe un archivo?
- 2. Detectar si el archivo es MP3
- 3. Comprobar si un archivo es una imagen
- 4. ¿Cómo puedo comprobar si un archivo es una imagen o no?
- 5. ¿Cómo puedo determinar mediante programación si un archivo MP3 es CBR o VBR? (Preferiblemente usando C#)
- 6. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 7. linux + verificar si el archivo es de texto o binario
- 8. ¿Cómo puedo verificar si un archivo es un archivo normal en C++?
- 9. Compruebe si un archivo es de archivo (zip o rar) usando php
- 10. ¿Cómo puedo determinar si un archivo es un archivo de imagen en .NET?
- 11. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 12. ¿Cómo puedo verificar si existe un archivo usando Emacs Lisp?
- 13. ¿Cómo puedo verificar si existe un archivo en Perl?
- 14. ¿Cómo puedo determinar que un archivo en particular es en realidad un archivo MP3?
- 15. Cómo verificar si el archivo es ASCII o binario en PHP
- 16. ¿Cómo puedo verificar si existe o no un recurso incrustado?
- 17. ¿Es importante verificar que el archivo cargado sea un archivo de imagen real?
- 18. PHP - ¿Cómo puedo verificar si se llamó a return() desde un archivo include() 'd?
- 19. ¿Cómo verificar con la ruta del archivo WINAPI es un disco o archivo o directorio?
- 20. ¿Puedo verificar si existe un archivo en una URL?
- 21. ¿Puedo verificar si existe un archivo en una URL?
- 22. cómo verificar si un archivo se selecciona usando javascript?
- 23. ¿cómo reproduzco el archivo mp3?
- 24. ¿Cómo comprobar si un archivo cargado es una imagen sin tipo de mime?
- 25. Cómo reproducir un archivo MP3 usando NAudio
- 26. ¿Es posible verificar la sintaxis del archivo PHP desde PHP?
- 27. ¿Cómo puedo verificar si un binario compilado es de 32 bits o de 64 bits?
- 28. Comprueba si un archivo es real o un enlace simbólico
- 29. ¿Cómo detectar si un archivo es PDF o TIFF?
- 30. ¿Cómo puedo verificar si el archivo existe en Makefile?
estás diciendo que yo debería comprobar si un archivo es una imagen o no usar getimagesize algo como: (! Getimagesize (camino)) si {print '! Este archivo no es una imagen';} ? getimagesize(); devuelve falso si el archivo no es una imagen? – kmunky
+1 para esta respuesta ... la única manera de asegurarse de que una imagen sea una imagen es usar una biblioteca (en este caso, hay incorporadas para las imágenes) que realmente abre el archivo y lo analiza como usted sugiere. De esta forma evitará que alguien cambie el nombre de un .XLS a .GIF y lo cargue. – TravisO
@kmunky: exactamente. Consulte el enlace del manual para ver qué tipos de imágenes reconoce la función. –