2012-01-09 22 views
5

estoy tratando de copiar a mi servidor una imagen de otro sitio y planeo usarCómo obtener la extensión de imagen usando file_get_contents php?

<? 
file_put_contents($toPath, file_get_contents($fromPath)); 
?> 

Ok, pero para construir el $toPath necesito la extensión del archivo. Sé cómo hacerlo si el $fromPath es una ruta normal con el nombre del archivo al final, pero si uso una ruta como Facebook usa http://graph.facebook.com/user_id/picture?type=large ¿cómo puedo obtener la extensión?

Gracias a todos.

+0

Para todo lo que me respondió, itryed: '$ file_info = new finfo (FILEINFO_MIME); \t // enfoque orientado a objetos! $ mime_type = $ file_info-> buffer (file_get_contents ($ fromPath)); // p.ej. da "image/jpeg" echo $ mime_type; salida(); O $ finfo = finfo_open (FILEINFO_MIME_TYPE); // devuelve mime tipo ala tipo de mime extensión foreach (glob ("*") como $ nombre de archivo) { echo finfo_file ($ finfo, $ filename). "\norte"; } finfo_close ($ finfo); O $ finfo = finfo_open (FILEINFO_MIME_TYPE); echo finfo_file ($ finfo, $ fromPath); 'NADA FUNCIONA –

+0

Para @Kolink esto funcionó '$ size = getimagesize ($ fromPath); $ extension = image_type_to_extension ($ size [2]); echo $ extension; ' –

Respuesta

8
$size = getimagesize($fromPath); 
$extension = image_type_to_extension($size[2]); 

Obtener el tamaño de la imagen, tomar el tipo de archivo.

5

En PHP 5.3 se puede utilizar finfo_file(), ver PHP ref

file_put_contents($toPath, file_get_contents($fromPath)); 
$handle = fopen($toPath,'r'); 
print finfo_file($handle); 

esto funciona también para los no imágenes.

0

No es necesario adivinar o usar tipos de mimo o bytes mágicos. La API de Facebook siempre devuelve jpegs (para más información, consulte FB Profile Pic always returned as ".jpg"?).

Pero, en general, aquí es una referencia para la detección inteligente de archivos de tipo: http://designshack.net/articles/php-articles/smart-file-type-detection-using-php/

Si sólo tiene un flujo de bytes, finfo_file() es su amigo.

Si tiene un tipo de mimo, solo use eso.

+0

Parece que el problema es que mi versión PHP es 5.2.17 y finfo_file() simplemente funciona en PHP> = 5.3.0 ... –

1

Ésta es la manera más rápida que la respuesta de @ Kolink:

$extension= end(explode("/", image_type_to_mime_type(exif_imagetype($photoURL)))); 
Cuestiones relacionadas