Voici un petit bout de code par lequel je "répond" un fichier au format PNG réalisé à partir d'un fichier PDF. Étant donné le temps que cela peut prendre, pour un grand nombre de fichiers, j'enregistre le PNG généré et le "répond" directement s'il existe déjà.
Ce script php est impliqué dans une page "Ajax", genre <img src="small.php?filebase=nom%20du%20fichier">
C'est encore perfectible, notamment en tenant compte de la date de modification du fichier PDF (mise à jour du PNG), etc.
Mais ma question concerne le fait de "répondre" un fichier déjà existant… Est-ce efficace ? peut-on faire mieux, plus rapide, plus directe que file_get_contents + header + echo ?
<?php
$filebase = $_GET["filebase"];
$dir = "templates";
$filePDF = "$dir/$filebase.pdf";
$filePNG = "$dir/$filebase.png";
if( ! file_exists( $filePNG ) )
{
$img = new imagick();
$img->setResolution(200,200);
$img->readImage("{$filePDF}[0]");
$img->scaleImage(50,0);
$img->setImageFormat("png");
$shadow = $img->clone();
$shadow->setImageBackgroundColor(new ImagickPixel('black'));
$shadow->shadowImage(80, 3, 0, 0);
$shadow->compositeImage($img, Imagick::COMPOSITE_OVER, 0, 0);
try {
$shadow->writeImages($filePNG, false);
} catch(Exception $e)
{}
header("Content-type: image/png");
echo $shadow;
} else {
$img = file_get_contents( $filePNG );
header("Content-type: image/png");
echo $img;
}
?>
# http://lmgtfy.com/?q=send+file+php
Posté par Gauthier Monserand (site web personnel) . Évalué à 4. Dernière modification le 24 août 2019 à 11:46.
Cela me semble un problème courant qui n'aurait pas du nécessiter une nouvelle question (google donne Environ 187 000 000 résultats pour "php send file")
En résumé : readfile ou X-Sendfile
http://www.brighterlamp.com/2010/10/send-files-faster-better-with-php-mod_xsendfile/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.