Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2250 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] forcer le download d'un fichier PDF???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] forcer le download d'un fichier PDF???

n°150580
amobile
Posté le 04-06-2002 à 08:40:24  profilanswer
 

salut les amis
 
j'ai une question qui peut paraitre bete (mais dont je n'ai pas trouvé la reponse!!! :D ).
Comment faire pour pemettre le download d'un fichier PDF???
Car si on met un lien direct sur le fihier ce c^ù*$ù^de IE l'ouvre avec acrobat directement!!!!
 
Merci


---------------
L'éternité c'est long... surtout à la fin
mood
Publicité
Posté le 04-06-2002 à 08:40:24  profilanswer
 

n°150622
marmotte.t​ranquille
Posté le 04-06-2002 à 09:42:42  profilanswer
 

Tu n'as qu'à le compresser, ou sinon tu fais confiance aux internautes qui feront un clic droit et "enregistrer la cible sous". :D
Peut-être qu'il y a moyen en PHP de faire mieux...

n°151822
amobile
Posté le 05-06-2002 à 15:36:54  profilanswer
 

ouaaaaaaaaaaaaaaaa
trop bonne idéee!!!!!
merci merci merci


---------------
L'éternité c'est long... surtout à la fin
n°152386
Ashlar
Posté le 06-06-2002 à 10:48:24  profilanswer
 

salut
il suffit d'envoyer un header specifique : "content-dispostion: attachment"  
voila un exemple :  
----------------------------------------------------------------
$fichier="fichier.pdf";
$fp = fopen($fichier,"r" );
$buff = fread($fp,filesize($fichier));
header("Content-Type: application/x-octet-stream\n" );
header( "Content-Disposition: attachment;filename=$fichier" );
header('Pragma: no-cache';);
header('Expires: 0';);
echo $buff;
fclose($fp);
-------------------------------------------------------
 
 :jap:


Message édité par Ashlar le 06-06-2002 à 10:49:37
n°152396
greg@frees​tarthu
Posté le 06-06-2002 à 10:53:31  profilanswer
 

Ashlar a écrit a écrit :

 
header( "Content-Disposition: attachment;filename=$fichier" );




 
ça marche avec tous les browsers ça?
c'est standard?
si oui merci pour l'info  :hello:

n°154148
grognon74
Posté le 08-06-2002 à 12:30:13  profilanswer
 

heuuu avec IE , NS , Mozilla ; Konqueror -> ok
avec opera : ok MAIS le nom de fichier dans la boite de dialogue est download.php et pas le vrai nom de fichier .(cependant le contenu est bien celui du fichier à downloader hein  , suffit de le renommer)
enfin spa trop grave ca  hein.


Message édité par grognon74 le 06-08-2002 à 12:31:32
n°155710
Sebastien
Posté le 10-06-2002 à 14:39:23  profilanswer
 

ET il y aura moyen dans une meme page de choisr lecture ou d/l ?

n°155726
grognon74
Posté le 10-06-2002 à 14:46:36  profilanswer
 

bah heu oui
 
exemple :  
<a href="fichier.pdf">lecture</a><br>
<a href="download.php?fichier=fichier.pdf">Download</a>
 
et voila....
le premier lien ouvira le document dans le browser(si le type de document est ouvrable par le browser)  tandis que le second proposera la boite de dialogue.
 
(avec un .zip par exemple c pas meme pas utile de passer via le lien download , le browser proposera la boite 'sauver sous' lui meme...)

n°155750
Sebastien
Posté le 10-06-2002 à 14:57:56  profilanswer
 

Oui mais mes users c pas des informaticiens, alors leur dire de compresser un fichier et de le dedoubler dans le rep :-D
 
Mais je vais faire ta soluce ca me plait

n°155763
Sebastien
Posté le 10-06-2002 à 15:05:20  profilanswer
 

Euhh j'ai pas trop reflechie a ton code, j'ai fait un pur copier coller
 
<?
 $fichier="Documentation/departement.xls";
$fp = fopen($fichier,"r" );
$buff = fread($fp,filesize($fichier));
header("Content-Type: application/x-octet-stream\n" );
header( "Content-Disposition: attachment;filename=$fichier" );
header('Pragma: no-cache';);
header('Expires: 0';);
echo $buff;
fclose($fp);
?>
 
et mon ie me donne ca :-)
ÐÏࡱ
 
 
Alors ma question :-)
Ca marche pour tous les fichiers ?
Ton echo $buff je vois pas trop
 
Maintenant si tu me dis que c juste une idée et qu'il faut l'interpreter oki je me reflechirais un peu plus

mood
Publicité
Posté le 10-06-2002 à 15:05:20  profilanswer
 

n°155791
grognon74
Posté le 10-06-2002 à 15:33:42  profilanswer
 

mm je viens de faire un test avec les memes conditions que toi
j'ai crée un rep Documentation dans lequel j'ai mis departement.xls.
 
l'appel de download.php me donne bien la boite de dialogue 'sauver-sous' .
Et le fichier sauvé correspond bien au fichier originel.
 
 
Quel os , quel browser , quelles conditions as tu toi?

n°155798
Sebastien
Posté le 10-06-2002 à 15:37:38  profilanswer
 

windows 2000 ie6
 
Apache 1.39
php 4.0
Sous win2k
 
Je continue les tests :-)

n°155800
Sebastien
Posté le 10-06-2002 à 15:39:07  profilanswer
 

Avec unfichier pdf la ca marche
 
J'ai du faire une boulette sur le premier je continue mes investigation merci bcp de ton aide
 
 
LOL maintenant il veut m'enregistrer simplement le nom de la page :-)
 
doc_dl


Message édité par Sebastien le 06-10-2002 à 15:41:15
n°155807
grognon74
Posté le 10-06-2002 à 15:44:02  profilanswer
 

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.

n°155815
Je@nb
Kindly give dime
Posté le 10-06-2002 à 15:47:32  profilanswer
 

o lieu d'ouvrir le fichier et de le lire, en 1 instruction tu fais ça : readfile('monfichier';);
Par contre évite les dl.php?monfichier car t'imagine qu'on fasse dl.php?config.inc.php ?

n°155967
grognon74
Posté le 10-06-2002 à 16:57:24  profilanswer
 

bah pour securiser ca il suffit de rajouter :  
 
if (!( ereg("(.doc|.pdf|.xls|.zip)$", $fichier)))
{
Die("Unauthorized file type" );
}
 
en tout debut de script.
 
(remplacer (.doc|.pdf|.xls|.zip) par la liste des extensions que tu veut autoriser en download. )
 
 
 
 
concernant le readfile , ouais c plus simple mais si  
-win32 et version de php < 4.0.5 alors readfile bug lors de lecture de binaires.
tandis que la method fopen-read-close est ok depuis la version 3.

n°155973
grognon74
Posté le 10-06-2002 à 16:59:31  profilanswer
 

Donc revoila les scripts +- sécurisés :
 
 
PHP4 > 4.0.5 :  
------------------------------------------------------
<?
if (!( ereg("(.doc|.pdf|.xls|.zip)$", $fichier)))
{
Die("Unauthorized file type" );
}
header("Content-Type: application/x-octet-stream\n" );
header( "Content-Disposition: attachment;filename=$fichier" );
header('Pragma: no-cache';);
header('Expires: 0';);
readfile($fichier);
?>
 
 
----------------------------- x-----------------------
 
php  < 4.0.5 :  
 
-----------------------------------------
<?
if (!( ereg("(.doc|.pdf|.xls|.zip)$", $fichier)))
{
Die("Unauthorized file type" );
}
$fp = fopen($fichier,"r" );
$buff = fread($fp,filesize($fichier));
header("Content-Type: application/x-octet-stream\n" );
header( "Content-Disposition: attachment;filename=$fichier" );
header('Pragma: no-cache';);
header('Expires: 0';);
echo $buff;
fclose($fp);
?>
-------------------------- x ----------------------

n°156027
grognon74
Posté le 10-06-2002 à 17:30:57  profilanswer
 

heu j'ai juste oublier un ptit truc  
remplacer "ereg" par "eregi"  
comme ca , c'est case insensitive  
 
  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] forcer le download d'un fichier PDF???

 

Sujets relatifs
spritefighter sous director prêt (recherche programmeur) download ici[PHP] Lister les fichiers d'un répertoire...
[PHP et JavaScript et aussi ASP tant qu'a faire] fonctions -> 2 returnEnvoyer un fichier joint
[JAVASCRIPT] Joindre un fichier à un mail[XML] Inclure un fichier XML
[Java] Lire un fichier de properties depuis une servlet[PHP] prob de permission sous dossier
[PHP] c koi la notation === ???[Java] Fichier War
Plus de sujets relatifs à : [PHP] forcer le download d'un fichier PDF???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR