mm bon pour info , voici comment fonctionne ce script :
-----------------------------------------------
// ouverture du fichier en read-only
$fichier="fichier.pdf";
$fp = fopen($fichier,"r" );
// on lit le contenu entier du fichier dans la variable //$buff.
//
$buff = fread($fp,filesize($fichier));
// la on utilise le fait que PHP puisse generer n'importe //quel type de fichier (pas que du html donc , et meme des //fichiers binaires , c'est le cas ici
// comment fait PHP pour preciser au browser que ce n'est //pas une page HTML qu'il recoit?
// en envoyant un header specifique :
header("Content-Type: application/x-octet-stream\n" );
// la le browser est informé du fait qu'il recoit du binaire //(octet-stream)
header( "Content-Disposition: attachment;filename=$fichier" );
// et ici on informe le browser qu'il doit proposer la boite //de dialogue sauver-sous.
// les deux headers suivants sont des anti-refresh
// le fichier downloadé ne sera pas mis en cache!
header('Pragma: no-cache';
header('Expires: 0';
// et maintenant quoi?
// PHP doit envoyer les octets au browser
// où sont ces octets? dans la variable $buff!
// donc on demande gentiment à PHP d'afficher le contenu de //cette variable.
// afficher? oui dans un sens , le standard output dans ce //cas ce n'est PAS la fenetre d'affichage du browser mais //bien le fichier en train d'etre downloadé.
echo $buff;
// et pour etre propre on ferme la connection fichier //precedement ouverte.
fclose($fp);
---------------
et voila.