Domanda

Ho un file PHP e un'immagine nella stessa directory. Come posso ottenere il file PHP per impostare le intestazioni come jpeg e " pull " l'immagine in esso. Quindi se andassi a file.php mostrerebbe l'immagine. Se riscrivo file.php in file_created.jpg e deve funzionare.

È stato utile?

Soluzione

Anziché utilizzare file_get_contents come suggerito da un'altra risposta, utilizzare readfile ed esegui l'output di altre intestazioni HTTP per giocare bene:

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

readfile legge i dati dal file e scrive direttamente nel buffer di output, mentre file_get_contents prima estrae l'intero file in memoria e quindi lo emette. L'uso del readfile fa una grande differenza se il file è molto grande.

Se si desidera ottenere più intelligente, è possibile produrre l'ultima volta modificata e controllare le intestazioni http in arrivo per If-Modified-Since e restituisce una risposta 304 vuota per dire al browser che hanno già la versione corrente .... ecco un esempio più completo che mostra come potrebbe farlo:

$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);

Altri suggerimenti

Dovrebbe essere facile come:

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

Dovrai solo capire come determinare il tipo corretto di mime, che dovrebbe essere piuttosto banale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top