Tout ce que vous avez à faire, c'est de définir le paramètre Content-Disposition
à l'en-tête attachment
pour obtenir une boîte de dialogue "Enregistrer sous". Voici un exemple de PHP de démarrage :
<?php
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="foo.pdf"');
readfile('/path/to/foo.pdf');
?>
Vous ne pouvez pas et ne voulez pas faire cela avec Javascript.
Note importante : en raison d'une mauvaise fonctionnalité, dans MSIE, le nom de fichier par défaut dans la boîte de dialogue "Enregistrer sous" ne sera pas dérivé de l'élément content-disposition
il sera à la place la dernière partie de l'information sur le chemin d'accès dans l'URL de la requête. Pour contourner ce problème, ajoutez le nom du fichier PDF au lien, par exemple http://example.com/pdf/foo.pdf
. Vous pouvez même l'utiliser en PHP pour lire le fichier PDF spécifié par pathinfo. Voici un exemple basique de pdf.php
:
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/pdf/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
Cela suppose toutefois que vous ayez MultiViews
de manière à ce que /pdf/
passera par ce fichier PHP, ou au moins par un fichier RewriteRule
de /pdf/
à /pdf.php/
.
Le principal avantage de cette approche est qu'il n'est pas nécessaire de modifier le code chaque fois que vous souhaitez ajouter un nouveau fichier PDF ou changer le nom du fichier PDF.
Vous pouvez même le rendre plus générique en déterminant et en définissant automatiquement le type de contenu approprié :
<?php
$file_name = $_SERVER['PATH_INFO'];
$file = '/path/to/all/files' . $file_name;
if (file_exists($file)) {
header('Content-Type: ' . mime_content_type($file_name));
header('Content-Disposition: attachment;filename="' . basename($file_name) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
} else {
header('HTTP/1.1 404 Not Found');
}
?>
Le nommer files.php
et vous avez alors un téléchargeur PHP générique auquel vous pouvez accéder par exemple par http://example.com/files/foo.pdf
, http://example.com/files/bar.zip
etc.
J'espère que cela vous aidera.