Pergunta

Eu tenho um arquivo PHP e uma imagem no mesmo diretório. Como eu poderia obter o arquivo PHP para configurá-lo de cabeçalhos como jpeg e "puxar" a imagem nele. Então, se eu fui para file.php ele iria mostrar a imagem. Se eu reescrever file.php para file_created.jpg e ele precisa de trabalho.

Foi útil?

Solução

Ao invés de uso file_get_contents como sugerido por outra resposta, uso readfile e saída para fora um pouco mais cabeçalhos HTTP para jogar bem:

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

readfile lê os dados do arquivo e grava direto para o buffer de saída, enquanto que file_get_contents iria primeiro puxar o arquivo inteiro na memória e, em seguida, saída dele. Usando readfile faz uma grande diferença se o arquivo é muito grande.

Se você queria ficar mais bonito, você poderia saída a última vez modificada, e verificar os cabeçalhos HTTP de entrada para o If-Modified-Since cabeçalho, e retornar um 304 resposta vazia para dizer ao navegador que já tem a versão atual .... aqui está um exemplo mais completo mostrando como você pode fazer isso:

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

Outras dicas

Deve ser fácil como:

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

Você só vai ter que descobrir como determinar o tipo MIME correto, que deve ser bastante trivial.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top