J'ai un fichier image $ (par exemple. ../Image.jpg)
qui a un type mime $ type
Comment puis-je l'envoyer au navigateur?
J'ai un fichier image $ (par exemple. ../Image.jpg)
qui a un type mime $ type
Comment puis-je l'envoyer au navigateur?
Si vous avez la liberté de configurer votre serveur pour vous-même, des outils comme mod_xsendfile (pour Apache) sont nettement mieux que la lecture et l'impression du fichier en PHP. PHP code devrait ressembler à ceci:
header("Content-type: $type");
header("X-Sendfile: $file"); # make sure $file is the full path, not relative
exit();
mod_xsendfile ramasse le X-Sendfile en-tête et envoie le fichier dans le navigateur lui-même. Cela peut faire une réelle différence dans les performances, surtout pour les gros fichiers. La plupart des solutions proposées lire l'intégralité du fichier en mémoire et ensuite l'imprimer. C'est OK pour un 20kbyte fichier image, mais si vous avez un 200 Mo de fichier TIFF, vous êtes lié pour obtenir des problèmes.
$file = '../image.jpg';
if (file_exists($file))
{
$size = getimagesize($file);
$fp = fopen($file, 'rb');
if ($size and $fp)
{
// Optional never cache
// header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
// header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
// header('Pragma: no-cache');
// Optional cache if not changed
// header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');
// Optional send not modified
// if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and
// filemtime($file) == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
// {
// header('HTTP/1.1 304 Not Modified');
// }
header('Content-Type: '.$size['mime']);
header('Content-Length: '.filesize($file));
fpassthru($fp);
exit;
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.