web-dev-qa-db-fra.com

Afficher l'image en utilisant file_get_contents

comment puis-je afficher une image récupérée à l'aide de file_get_contents en php?

Dois-je modifier les en-têtes et y renvoyer un message en écho?

Merci!

40
Belgin Fish

Dois-je modifier les en-têtes et y renvoyer un message en écho?

exactement.

Envoyez une header("content-type: image/your_image_type"); et les données par la suite.

30
Pekka 웃

Vous pouvez utiliser readfile et générer les en-têtes d'image que vous pouvez obtenir de getimagesize comme ceci:

$remoteImage = "http://www.example.com/gifs/logo.gif";
$imginfo = getimagesize($remoteImage);
header("Content-type: {$imginfo['mime']}");
readfile($remoteImage);

Si vous devez utiliser readfile ici, c'est parce qu'il sort le fichier directement dans la mémoire tampon de sortie où file_get_contents lira le fichier en mémoire, ce qui est inutile dans ce contenu et potentiellement intensif pour les fichiers volumineux.

66
robjmills
$image = 'http://images.itracki.com/2011/06/favicon.png';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;

// Echo out a sample image
echo '<img src="' . $src . '">';
47
Yaşar Xavan

Vous pouvez le faire, ou vous pouvez utiliser la fonction readfile, qui le sort pour vous:

header('Content-Type: image/x-png'); //or whatever
readfile('thefile.png');
die();

Edit: Derp, correction d'une faute de frappe évidente.

9
Mike Caron

vous pouvez faire comme ça:

<?php
    $file = 'your_images.jpg';

    header('Content-Type: image/jpeg');
    header('Content-Length: ' . filesize($file));
    echo file_get_contents($file);
?>
8
Mochammad Taufiq

Petite modification de @seengee answer: Afin de fonctionner, vous avez besoin d'accolades autour de la variable, sinon vous obtiendrez une erreur.

header("Content-type: {$imginfo['mime']}");

0
darighteous1