Question

J'ai un fichier PHP et une image dans le même répertoire. Comment puis-je obtenir le fichier PHP pour définir ses en-têtes en jpeg et "tirer" l'image en elle. Donc, si je suis allé à file.php, il affichera l'image. Si je réécris file.php dans file_created.jpg et que cela doit fonctionner.

Était-ce utile?

La solution

Plutôt que d'utiliser file_get_contents comme suggéré par une autre réponse, utilisez readfile et affiche quelques en-têtes HTTP supplémentaires pour une lecture agréable:

   <?php
    $filepath= '/home/foobar/bar.gif'
    header('Content-Type: image/gif');
    header('Content-Length: ' . filesize($filepath));
    readfile($file);
   ?>

readfile lit les données du fichier et les écrit directement dans le tampon de sortie, alors que file_get_contents extrait d’abord le fichier entier en mémoire, puis le sort. L'utilisation de readfile fait une grande différence si le fichier est très volumineux.

Si vous voulez être plus mignon, vous pouvez afficher l'heure de la dernière modification et vérifier les en-têtes http entrants pour le Si-Modified-Since , et renvoyer une réponse vide à 304 pour informer le navigateur de la version actuelle .... voici un exemple plus complet montrant comment pourrait le faire:

$filepath= '/home/foobar/bar.gif'

$mtime=filemtime($filepath);

$headers = apache_request_headers(); 
if (isset($headers['If-Modified-Since']) && 
    (strtotime($headers['If-Modified-Since']) >= $mtime)) 
{
    // Client's cache IS current, so we just respond '304 Not Modified'.
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT', true, 304);
    exit;
}


header('Content-Type:image/gif');
header('Content-Length: '.filesize($filepath));
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
readfile($filepath);

Autres conseils

Devrait être simple comme:

<?php
    $filepath= '/home/foobar/bar.jpg';
    header('Content-Type: image/jpeg');
    echo file_get_contents($filepath);
?>

Il vous suffira de déterminer comment déterminer le type de mime correct, ce qui devrait être plutôt trivial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top