Pregunta

Estoy usando Uploadify para subir una imagen al servidor.
se carga la imagen, y se coloca en la carpeta temporal del servidor web.

Ahora tengo que trabajar con el archivo beore moverlo a lo que es real la ubicación, y tengo el siguiente código:

// Get the filepath and filename from server temp dir
$sourceFile   = $_FILES[ 'Filedata' ][ 'tmp_name' ]; // e.g. c:\server\path\tmp\php159.tmp

// Solution 1 for getting file extension
$fileExt1     = pathinfo($sourceFile, PATHINFO_EXTENSION); // <-- This only returns .tmp

// Solution 2 with getimagesize
list(,,$extension) = getimagesize($sourceFile);
$fileExt2     = $extension; // this only returns the number 2.

// Solution 3 with getimagesize
$img = getimagesize($sourceFile);
$fileExt3 = $img[2]; // this only returns the number 2.

No estoy usando expresiones regulares para leer el nombre de archivo, ya que un usuario puede nombrar el archivo de nada, así que tengo que leer los datos de archivo.

Cualquier sugegstions alguien?

¿Fue útil?

Solución

Bueno, para empezar $ sourceFile debe $_FILES['Filedata']['name'] en lugar de $_FILES['Filedata']['tmp_name'] pero sólo para su primera solución .

Ahora con respecto a sus soluciones / problemas:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION); // debería funcionar ahora
  2. getimagesize() devuelve una constante que indica el tipo de imagen en el segundo índice
  3. mismo que el punto 2

Tenga en cuenta que exif_imagetype() vuelve exactamente la misma información que el segundo índice de getimagesize(), si tiene acceso a esta función se debe realizar de mejor manera.

Ahora, para las constantes de imagen, los más comunes son tres:

  • IMAGETYPE_GIF = 1
  • IMAGETYPE_JPEG = 2
  • IMAGETYPE_PNG = 3

Comprobación es tan simple como hacer algo como esto:

switch (exif_imagetype($_FILES['Filedata']['tmp_name']))
{
    case IMAGETYPE_GIF:
        echo 'is a GIF';
    break;

    case IMAGETYPE_JPEG:
        echo 'is a JPEG';
    break;

    case IMAGETYPE_PNG:
        echo 'is a PNG';
    break;

    case default:
        echo 'is something else;
    break;
}

Una cosa más, es mejor utilizar getimagesize() / exif_imagetype() que depender de la extensión del archivo, ya que la extensión se puede cambiar fácilmente.

Otros consejos

Sus soluciones # 2 y # 3 tanto trabajo ya. De la getimagesize () manual de la página :

  

Devuelve una matriz con 7 elementos.
  ...
  Índice 2 es una de las constantes IMAGETYPE_XXX que indican el tipo de la imagen.

Así que para un .gif entonces este debe ser el número entero 2. Para obtener la extensión de archivo image_type_to_extension() uso puesto que ya está usando la librería GD. por ejemplo.

$img = getimagesize($sourceFile);
$fileExt = image_type_to_extension($img[2])

exif_imagetype () puede determinar un número de formatos gráficos, es rápido y incluso no utiliza GD.

  

Edit: Veo que ya está utilizando getimagesize () y tiene dificultades para traducir las constantes. La página exif_imagetype () vinculado anteriormente tiene una traducción de todo tipo de imágenes devueltos que deben ser válidos durante getimagesize () también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top