J'ai un dossier protégé par mot de passe htaccess avec plusieurs fichiers dedans. Les utilisateurs ne sont pas autorisés à accéder à tous les fichiers, mais sont autorisés à télécharger les leurs. Comme je n'arrive pas à lier le lien au fichier et que la copie/suppression n'est pas une vraie solution, je pensais ouvrir le fichier en utilisant file_get_contents et le renvoyer dans la page en utilisant l'en-tête de droite. Mais .. je ne le fais pas fonctionner .. Voici mon code. L'erreur que je reçois est que lors de l'ouverture du fichier, je reçois une erreur "fichier est endommagé" d'Acrobat.Copier et télécharger un fichier dans le dossier protégé htaccess
<?php
$file = "cms/docs/5641-1.pdf";
header('Content-Description: File Transfer');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename='.basename("exoticfilename.pdf"));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
if (file_exists($file))
{
echo file_get_contents($file);
}
?>
Dans cet exemple, j'utilise simplement un fichier PDF, mais il existe plusieurs types de fichiers. Par conséquent, je devrais probablement changer l'en-tête en fonction du type de fichier. Y a-t-il une solution pour cela, ou devrais-je simplement utiliser une instruction if/else très longue?
S'il y a un autre, une meilleure façon, je suis ouvert pour cela.
MISE À JOUR
Les travaux ci-dessus, mais pas avec tous les fichiers. Les fichiers PDF plus anciens (Acrobat 6) ne fonctionnent pas, mais les fichiers Acrobat X fonctionnent. Même compte pour les fichiers docx. Certains travaillent, d'autres non. Très bizarre, puisque je suis capable d'ouvrir tout directement sur mon PC. Je suppose qu'il a quelque chose à voir avec la ligne application/pdf (ou application/vnd.openxmlformats-officedocument.wordprocessingml.document 'pour docx). Tous les autres, comme les images, fonctionnent.
J'ai copié votre code et ça marche bien. Essayez d'ajouter 'die()' après 'file_get_contents' – Narek
Merci Narek. J'ai essayé die() mais cela n'a pas fonctionné. Je viens de le tester avec un fichier PDF plus ancien et cela fonctionne. Se pourrait-il qu'il y ait quelque chose de mal dans l'en-tête du fichier? Y at-il peut-être une sorte d'en-tête "général" que je peux utiliser pour différents PDF, DocX, Tiffs et ainsi de suite? Je veux dire dans cet en-tête de ligne ('Content-type: application/pdf'); – mat
@mat, je vois votre point, je vais supprimer mes commentaires précédents, car ils semblent être hors de propos. – Jacco