2012-04-28 10 views

Respuesta

985

No hay necesidad de utilizar las funciones de cadena. Se puede usar algo que está diseñado realmente para lo que quiere: pathinfo():

$path = $_FILES['image']['name']; 
$ext = pathinfo($path, PATHINFO_EXTENSION); 
+0

$ path = $ _FILES ['image'] ['name'] [0]; el nombre real del archivo está en una matriz. pathinfo solo evaluará una cadena. – foureight84

+8

@ foureight84: Ese es solo el caso si tiene campos de carga llamados 'image []' ... – ThiefMaster

+2

Modifiqué un poco su código e hice una función, en caso de que alguien quiera usar una función. Aquí está el código: function getFileExtension ($ path) { $ ext = pathinfo ($ path, PATHINFO_EXTENSION); return $ ext; } –

12

¿Qué tal

$ext = array_pop($userfile_extn); 
+7

que es una función linda: P – Michelle

+2

no recomiendo esto. Confía en que el orden de la matriz será el mismo en años. Es una solución perezosa que muy probablemente causará problemas en el futuro. –

25

Un mejor método está utilizando strrpos + substr (más rápido que explotar para eso):

$userfile_name = $_FILES['image']['name']; 
$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1); 

Pero, para comprobar el tipo de un archivo, utilizando mime_content_type es una mejor manera: http://www.php.net/manual/en/function.mime-content-type.php

+3

¿Mejor que 'pathinfo()'? No lo creo. – ThiefMaster

+1

Mejor que explotar ;-). Pero, tiene razón, pathinfo es una mejor forma cuando está habilitado (algún servidor mutualizado deshabilita esta función ...). – Julien

+10

** Nota importante **: Esto no funcionará con rutas como: '/ var/www/website.com/somefile'. – brianreavis

20

usted podría tratar con este tipo de MIME para

$image = getimagesize($_FILES['image']['tmp_name']); 

$image['mime'] devolverá el tipo de mimo.

Esta función no requiere la biblioteca GD. Puede encontrar la documentación here.

Esto devuelve el tipo de mímica de la imagen.

Algunas personas usan el $_FILES["file"]["type"] pero no es confiable dado por el navegador y no por PHP.

Puede usar pathinfo() como ThiefMaster sugirió recuperar la extensión de la imagen.

Primero asegúrese de que la imagen se está cargando correctamente durante el desarrollo antes de realizar cualquier operación con la imagen.

45

Esto funciona así:

$array = explode('.', $_FILES['image']['name']); 
$extension = end($array); 
+17

'Sólo se deben pasar las variables por referencia', el Manual de PHP – dader

+1

Este no es un buen enfoque ya que la función 'end' está destinada a mover el puntero interno de una matriz al final de la matriz y regresar ese elemento. El problema es que la matriz se pasa por referencia y dado que su matriz se genera dinámicamente, no se puede pasar por referencia, de ahí la advertencia o falla, dependiendo de su versión de PHP. – SteveK

+25

** Nota importante **: Esto no funcionará con rutas como: '/ var/www/website.com/somefile' (es mejor utilizar pathinfo). – brianreavis

Cuestiones relacionadas