le 09/03/2008 à 11:59
Forcer le téléchargement d'un pdf
Bonjour à tous
Sur une page.php je propose un lien pour visualiser un fichier PDF (qui fonctionne sans problème) et un lien pour forcer le téléchargement du même fichier PDF.
J'apprends PHP j'ai donc fait des recherches puis j'ai essayé ce que j'ai trouvé.
1°) - La première méthode:
2°) - La seconde :
3°) - La troisième :
Puis en localhost je teste. À chaque fois, le lien propose bien de télécharger le fichier. Si j'accepte j'ai une petite fenêtre avec une barre verte de progression du téléchargement. Je retrouve bien le fichier "téléchargé" dans le répertoire du disque dur où a été défini l'enregistrement du téléchargement avec le bon nom et la bonne taille de fichier. Mais à chaque fois que je tente d'ouvrir ce fichier (dont l'original bien sûr fonctionne parfaitement), je reçois le message suivant :
"Acrobat n'a pas pu ouvrir exemple.pdf, car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correctement, par exemple). Pour créer un document Adobe PDF, ouvrez l'application source, puis imprimez le document vers Adobe PDF."
Par avance merci.
Sur une page.php je propose un lien pour visualiser un fichier PDF (qui fonctionne sans problème) et un lien pour forcer le téléchargement du même fichier PDF.
J'apprends PHP j'ai donc fait des recherches puis j'ai essayé ce que j'ai trouvé.
1°) - La première méthode:
<?php
//Envoyer l'en-tête d'attachement.
$header = "Content-Disposition: attachment; ";
$header .= "filename=$nomFichier\n";
header($header);
//Envoyer l'en-tête de type MIME (ici pdf).
header("Content-Type: application/pdf\n");
//Envoyer le document. Pas d'encodage magic_quotes.
set_magic_quotes_runtime(0);
readfile($path.$nomFichier);
?>
2°) - La seconde :
<?php
//Begin writing headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//Use the switch-generated Content-Type
header("Content-Type: application/pdf;");
//Force the download
$header="Content-Disposition: attachment; filename=".$nomFichier.";";
header($header );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$poids);
@readfile($path.$nomFichier);
exit();
?>
3°) - La troisième :
<?php header('Content-Type: application/octet-stream');
header('Content-Length: '.$poids);
header('Content-disposition: attachment; filename='.$nomFichier);
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($path.$nomFichier);
exit();
?>
Puis en localhost je teste. À chaque fois, le lien propose bien de télécharger le fichier. Si j'accepte j'ai une petite fenêtre avec une barre verte de progression du téléchargement. Je retrouve bien le fichier "téléchargé" dans le répertoire du disque dur où a été défini l'enregistrement du téléchargement avec le bon nom et la bonne taille de fichier. Mais à chaque fois que je tente d'ouvrir ce fichier (dont l'original bien sûr fonctionne parfaitement), je reçois le message suivant :
"Acrobat n'a pas pu ouvrir exemple.pdf, car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correctement, par exemple). Pour créer un document Adobe PDF, ouvrez l'application source, puis imprimez le document vers Adobe PDF."
Par avance merci.