2010-07-05 15 views

Respuesta

41
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif 

ACTUALIZACIÓN: Veo una gran cantidad de downvotes. ¿Cuál es el problema con mi enfoque? Por favor hagamelo saber.

+0

este es el camino también. – RobertPitt

+1

Tengo un 'hello.jpg' pero lo renombré a' hello.gif' y lo cargo para que obtenga la extensión pero no el tipo correcto. El abordaje de Pekka es IMO, el mejor – DrColossos

+2

La pregunta original pregunta para encontrar la extensión solamente. Sin control de seguridad u otras necesidades. – fabrik

-2

Las funciones básicas de cadena, strrpos() y substr() pueden hacer eso por usted. Además de muchas otras formas sofisticadas.

+0

Esta es una respuesta directa a una pregunta en la que lo que el OP probablemente quiere es una verificación exhaustiva del tipo de archivo y no solo una para la extensión. Por tu lógica, esto merecería un -1. Solo digo ';) –

+0

@Pekka "para buscar solo la extensión de una imagen". Suena inequívoco para mí – Robus

+1

@Robus sí. Solo estoy provocando a @Col porque me ha votado negativamente para obtener respuestas directas a solicitudes tan claras cuando la solicitud clara no era, de hecho, lo que el OP realmente necesitaba para lograr la mejor solución. Sus comentarios siempre se justificaron (valoro mucho el conocimiento y la entrada de @Col, la etiqueta PHP lo necesita) pero él siempre está siendo muy directo al respecto, y por eso estoy siendo un idiota a cambio cuando comete el mismo error :) Me gustaría señalar que la respuesta negativa que ha recibido esta respuesta no es de mí, sin embargo. –

1

Como Col. Shrapnel mencionó; hay un buen número de maneras

$path = '/some/where/img.gif'; 
$path = explode('.',$path); 
$path = end($path); 
+0

gracias, este código se ve bien, pero como dije antes solo quiero usar una función estándar directa como 'pathinfo'. – Siva

14

Por lo general es más deseable para detectar el tipo de imagen real (no por extensión sino por su contenido). Para eso, use getimagesize().

+1

Esta debería ser la respuesta correcta. La extensión en el nombre puede ser cualquier cosa. – Nishanthan

0

Le recomendaría que ejecute cualquier imagen cargada/vinculada a través de una comprobación de GD/ImageMagick y la vuelva a guardar para evitar cualquier código malicioso oculto dentro de las imágenes. Esto también le permitirá guardar todas las imágenes con la misma extensión para facilitarle las cosas.

http://www.php.net/imagepng
http://www.php.net/imagegif

+0

Esta es una buena sugerencia, a pesar de que no está relacionada con la pregunta. No merece un voto negativo. Sin embargo, la conversión cruzada de JPG a GIF y viceversa nunca conducirá a buenos resultados. –

+1

Gracias. Sé que no está totalmente relacionado con la pregunta, aunque pensé que para aceptar las imágenes cargadas es mejor escupir esta información antes de que algo malo suceda. También podría verificar la extensión al principio, ver si el resultado dado existe en una serie de extensiones permitidas, y luego guardarla como la misma extensión exacta una vez ejecutada a través de la verificación GD/ImageMagick. También mantenga un valor predeterminado (por ejemplo, PNG) si no se encontró un resultado. – eklundchristopher

+0

gracias, esta es una buena sugerencia. – Siva

5

tuve un problema en esta primera respuesta y el URL con el ancla ex. google.com/image.jpg#anchor

mejor solución

$filename_from_url = parse_url($url); 
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION); 
0

Te recomendaría manera perfecta

$file_path = '/some/where/img.gif'; 
$info = new SplFileInfo($file_path); 
$file_extension = $info->getExtension(); 
var_dump($file_extension); 

para obtener más detalles aquí The SplFileInfo class

espero que esto le ayudará a .

¡Salud!

Mudassar Ali

1

Creo que la forma más correcta está utilizando la función exif_imagetype eco:

exif_imagetype("/testdir/dir2/image.gif"); 

    function get_image_type($image_path){ 

     $extension = array(IMAGETYPE_GIF => "gif", 
     IMAGETYPE_JPEG => "jpeg", 
     IMAGETYPE_PNG => "png", 
     IMAGETYPE_SWF => "swf", 
     IMAGETYPE_PSD => "psd", 
     IMAGETYPE_BMP => "bmp", 
     IMAGETYPE_TIFF_II => "tiff", 
     IMAGETYPE_TIFF_MM => "tiff", 
     IMAGETYPE_JPC => "jpc", 
     IMAGETYPE_JP2 => "jp2", 
     IMAGETYPE_JPX => "jpx", 
     IMAGETYPE_JB2 => "jb2", 
     IMAGETYPE_SWC => "swc", 
     IMAGETYPE_IFF => "iff", 
     IMAGETYPE_WBMP => "wbmp", 
     IMAGETYPE_XBM => "xbm", 
     IMAGETYPE_ICO => "ico"); 

     return $extension[exif_imagetype($image_path)]; 
} 
+0

de esta manera funciona incluso si la url se utiliza para codificar la imagen en el servidor - Bien hecho. – pgee70

0

Creo que la manera fácil usando strrpos() y substr() métodos

$path = "/testdir/dir2/image.gif"; 
$ext = substr($path, strrpos($path, '.')+1); 
echo $ext; // output will be gif 

más respuestas para Another Question relacionado con esta pregunta

Cuestiones relacionadas