Forcer le téléchargement d'un fichier .pdf

Bonjour ,
Je créé actuellement un site et sur une de mes pages , j’ai créé une liste déroulante pouvant permettre de télécharger des cours en .pps et .pdf.

Pour les .pps j’ai eu du mal mais c’est ok maintenant tandis que pour les .pdf , il m’ouvre bien la fenetre de telechargement de mon navigateur avec le logiciel adobe. Cependant quand je veux le lire directement ou quand il est téléchargé, adobe reader s’ouvre mais avec un message d’erreur:

“Adobe n’a pas pu ouvrir le fichier 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).”

Sur mon fichier “redirection_navigation.php” j’ai inscrit ce code là:

Code :

<?php   function fct_download($nom_fichier) 
{ 
// infos du fichier 
$fichier = "/Telechargements/Cours_Systemes_et_reseaux/$nom_fichier"; 
// téléchargement du fichier 
header('Content-disposition: attachment; filename='.$nom_fichier); 
header('Content-Type: application/pdf'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: '.filesize($fichier)); 
header('Pragma: no-cache'); 
header('Cache-Control:must-revalidate, post-check=0, pre-check=0');
 header('Expires: 0'); 
readfile($fichier);   
}   

switch($_POST['Cours'])
{ 
case "systemes_exploitation": 
header("Location: [url=http://pc.fastoche.free.fr/Telechargements/Cours_Systemes_et_reseaux/Systemes_exploitation.pps");]pc.fastoche.free.fr...[/url]
break; 
case "presentation_reseaux": 
header("Location: [url=http://pc.fastoche.free.fr/Telechargements/Cours_Systemes_et_reseaux/Presentation_des_Reseaux_source_profs_d_info_BTS.pps");]pc.fastoche.free.fr...[/url] break; 
case 'Reseau_Introduction': fct_download('Reseau_Introduction.pdf'); 
break;   
} 
?>

Que puis-je modifier pour que ce fichier .pdf soit lisible une fois télécharger par les visiteurs?

MErci d’avance
Message edité le 25/06/2007 à 22:41
Message edité le 25/06/2007 à 22:41

A défaut, vérifie que php n’a pas timeouté. Je vois pas de réels problèmes là à part ça.

Désolé mais à pas compris “timeouté”?

En gros, ton script peut durer qu’un certain temps (10 secondes chez moi, 30 secondes souvent, etc).

Essaye avec : set_time_limit(0) en début de script. Si c’est ça, il te faudra plancher sur une autre solution.

Note que la fonction peut ne rien faire selon la configuration (notamment car les hébergeurs ne l’acceptent pas forcément)

Pour forcer le téléchargement, il faut mettre un mimetype inconnu (souven x-forcedownload) à la place de
header(‘Content-Type: application/pdf’);
Pour la corruption des fichiers, essaie avec un exit() juste aprés le readfile… (sinon le fichier contient une ligne en trop)

Le type application/octet-stream est fait pour ça :wink:

[quote="[myself]"][quote=“Metaldark”]
Pour forcer le téléchargement, il faut mettre un mimetype inconnu (souven x-forcedownload) à la place de
header(‘Content-Type: application/pdf’);
Pour la corruption des fichiers, essaie avec un exit() juste aprés le readfile… (sinon le fichier contient une ligne en trop)
[/quote]

Le type application/octet-stream est fait pour ça :wink:
[/quote]
En effet ca fait plus clean :slight_smile: