Submitted by Hervé Saladin on
Bonjour,
pour un module que je développe, j'ai besoin d'envoyer des fichiers de formats autres que HTML (exemple : image, pdf etc ...) et ces fichiers sont générés ou trouvé dynamiquement (ce ne sont pas des fichiers accessible directement par leur URL directe, ni des pièces jointes à des nodes).
J'ai donc une fonction de callback correspondant à une page définie dans le menu de mon module, cette fonction détermine quel fichier doit être envoyé et l'envoie.
En PHP, ça donne quelque chose du genre (version simplifiée) :
<?php
function monmodule_mafonctiondecallback() {
$cheminFichier = '/un/fichier/quelque/part.pdf';
header('Content-type: '.mime_content_type($cheminFichier));
print(file_get_contents($cheminFichier));
exit();
}
?>
Le problème, vous l'aurez compris, c'est que ça n'est pas "propre" :
1) ma fonction est censée retourner une source html : or moi je ne retourne rien et j'arrête brutalement l'execution avec un exit(); afin que drupal ne rajoute pas du code HTML correspondantà des menus ou des blocs qui n'ont rien à faire dans un fichier PDF ou image ...
2) avec cette méthode, pas de cache : or sur mon serveur de production je souhaite que le contenu des fichiers envoyés (ainsi que l'entete content-type) soient mis en cache pour économiser de la ressource.
J'imagine qu'il doit y avoir un meilleur moyen, mais j'ignore lequel ...
Y'a-t-il une fonction spéciale, un hook, un module qui me donnerait l'API appropriée ... ?
Merci d'avance,
Hervé