[RESOLU] Téléchargement à partir d'une ibays

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server

Modérateur: modos Ixus

[RESOLU] Téléchargement à partir d'une ibays

Messagepar ticamoha » 27 Avr 2006 00:27

Salut,

Je dispose de SME 7.0rc1 et voudrais proposer un téléchargement de fichiers à partir d'une ibays. Bien sûr j'ai un script (en PHP). Il utilise la fonction readfile($nom).
Le problème c'est à la place de l'ouverture d'un popup pour enregistrer le fichier, son contenu s'affiche à l'écran. :cry:
Quelle est la solution ? Est-ce un paramétrage au niveau du serveur ou autre chose ?

Mon code :
Le nom du fichier est récupéré dans ma base de données;

Code: Tout sélectionner

$fichier="telecharge/".$fichier;
if (file_exists($fichier)) {
        header("Content-disposition: attachment; filename=$fichier");
        header("Content-Type: application/force-download");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".filesize($fichier));
        header("Pragma: no-cache");
        header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
        header("Expires: 0");
        @readfile($fichier);
   print ("Fichier à Télécharger : ".$fichier);
}



Merci de votre aide.
Dernière édition par ticamoha le 19 Mai 2007 09:13, édité 1 fois au total.
Le partage de connaissances grandit l'homme.
http://www.mazone.homelinux.net
Avatar de l’utilisateur
ticamoha
Premier-Maître
Premier-Maître
 
Messages: 55
Inscrit le: 09 Avr 2006 00:43
Localisation: Pas loin de l'autorute A10 ;-)

Messagepar Bunk » 27 Avr 2006 00:32

Bonsoir,

je suis pas vraiment une reference dans le monde du PHP mais j'ai deja vu des sujet traiter de ca sur le forum de [url=http://www.phpfrance.com]phpfrance.com[url]

mais je peux me tromper et ca peux venir de SME 7
Bunk
Avatar de l’utilisateur
Bunk
Contre-Amiral
Contre-Amiral
 
Messages: 396
Inscrit le: 22 Nov 2002 01:00

Messagepar MasterSleepy » 27 Avr 2006 08:00

Salut,

Sur le site de www.php.net il y a un example de code utilisant cette fonction.
http://fr.php.net/manual/fr/function.readfile.php#62302
Les traitements sont différents selon le browser utilisé.

A+
"Microsoft fera quelque chose qui ne plantera jamais quand ils commenceront à fabriquer des clous "
http://www.vanhees.cc
Avatar de l’utilisateur
MasterSleepy
Amiral
Amiral
 
Messages: 2625
Inscrit le: 24 Juil 2002 00:00
Localisation: Belgique

Messagepar mat67 » 27 Avr 2006 18:33

salut,

Essaie ce script. il fait juste ce qu'il faut.

http://www.phpscripts-fr.net/scripts/do ... php?id=722

enfin, tu peux t'en inspirer ...


et si tu veux un truc plus balaise avec la gestion des sessions, protections, etc ... j'ai ce lien :

http://www.phpcs.com/codes/PROTEGER-TEL ... 33533.aspx

a+
... Sea, sex and sun ? hmmm ... faudrait déjà qu'il y est le Sun ! ... YeY ! The Sun is back at last ! After 8 months ... Say Hey Hey ! ... naaaa il pleut ! ... ah de nouveau le soleil !!! AAAHHH HALSASS JO TEME !
Avatar de l’utilisateur
mat67
Lieutenant de vaisseau
Lieutenant de vaisseau
 
Messages: 245
Inscrit le: 23 Juin 2004 23:05
Localisation: Somewhere in Alsace ...

Messagepar ticamoha » 27 Avr 2006 21:56

re-salut,

j'ai pas mal de recherches entre temps, mais je vais essayer la sernière proposition et vous tiens au courant.

A+
Le partage de connaissances grandit l'homme.
http://www.mazone.homelinux.net
Avatar de l’utilisateur
ticamoha
Premier-Maître
Premier-Maître
 
Messages: 55
Inscrit le: 09 Avr 2006 00:43
Localisation: Pas loin de l'autorute A10 ;-)

Messagepar ticamoha » 27 Avr 2006 22:48

Ben, je ne pense pouvoir en tirer quelque chose (jfile_browser.php3). Ce que je cherche, c'est seulement de trouver le moyen de faire que le fichier qui normalement doit être télécharger, ne soit pas affiché dans le navigateur. :wink:

Je pense, mais je ne sais pas encore comment, qu'il y a un paramétrage à faire au niveau du serveur.
Je continue à me documenter.
Mais étant donné que j'utilise header() et readfile() dans mon script, il n'est pas impossible qu'il ait quelque chose à voir aussi de ce côté.

Merci à vous, je continue mes investigations et vous tiens au courant. A+
Le partage de connaissances grandit l'homme.
http://www.mazone.homelinux.net
Avatar de l’utilisateur
ticamoha
Premier-Maître
Premier-Maître
 
Messages: 55
Inscrit le: 09 Avr 2006 00:43
Localisation: Pas loin de l'autorute A10 ;-)

Messagepar mat67 » 27 Avr 2006 22:52

ticamoha a écrit:Ben, je ne pense pouvoir en tirer quelque chose (jfile_browser.php3). Ce que je cherche, c'est seulement de trouver le moyen de faire que le fichier qui normalement doit être télécharger, ne soit pas affiché dans le navigateur. :wink:

Je pense, mais je ne sais pas encore comment, qu'il y a un paramétrage à faire au niveau du serveur.
Je continue à me documenter.
Mais étant donné que j'utilise header() et readfile() dans mon script, il n'est pas impossible qu'il ait quelque chose à voir aussi de ce côté.

Merci à vous, je continue mes investigations et vous tiens au courant. A+


c'est vrai que ça "devrait" marcher. le sujet m'interesse aussi. essaie ça :

If you're passing files through a script, you may want to include this header:

header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");

Otherwise, some programs such as Adobe Reader may have problems opening files directly.

ça compte peut être dans l'ordre !

<?php
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . filesize($theFile));
header ("Content-Disposition: attachment; filename=$theFileName");
readfile($theFile);
?>


et donne aussi le chemin complet à ton fichier sur le serveur à ton variable $file. :

du genre $fichier = '/var/www/html/file-to-download.xyz';
... Sea, sex and sun ? hmmm ... faudrait déjà qu'il y est le Sun ! ... YeY ! The Sun is back at last ! After 8 months ... Say Hey Hey ! ... naaaa il pleut ! ... ah de nouveau le soleil !!! AAAHHH HALSASS JO TEME !
Avatar de l’utilisateur
mat67
Lieutenant de vaisseau
Lieutenant de vaisseau
 
Messages: 245
Inscrit le: 23 Juin 2004 23:05
Localisation: Somewhere in Alsace ...

Messagepar ticamoha » 28 Avr 2006 10:41

Salut, :D

ça y est :D :D :D ça marche ! :D

en fait l'ordre a effectivement une grande importance, et voilà le bout de code qui fonctionne bien :
Code: Tout sélectionner
$fichier="telecharge/".$fichier;
if (file_exists($fichier)) {
      header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
      header("Content-Type: application/octet-stream");
      header("Content-Transfer-Encoding: binary");
      header("Content-Length: ".filesize($fichier));
      header("Content-disposition: attachment; filename=$fichier");
      header("Cache-Control: private", false);
      header("Expires: 0");
      @readfile("$fichier");

}


Je n'ai même pas eu besoin de mettre URL complet, le relatif fonctionne bien.
Petit rappel, le nom du fichier se trouve dans ma base de données.

Je vous remercie tous, c'est extra super ! :D
Le partage de connaissances grandit l'homme.
http://www.mazone.homelinux.net
Avatar de l’utilisateur
ticamoha
Premier-Maître
Premier-Maître
 
Messages: 55
Inscrit le: 09 Avr 2006 00:43
Localisation: Pas loin de l'autorute A10 ;-)

Messagepar ticamoha » 28 Avr 2006 12:14

Et voilà le code définitif :

Code: Tout sélectionner
// Test de l'existence du fichier sur le serveur
$fichier="telecharge/".$fichier;
if (file_exists($fichier)) {
      header("Pragma: public");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Cache-Control: private", false);
      header("Content-Type: application/force-download");
      header("Content-disposition: attachment; filename=\"".basename($fichier).\"");
      header("Content-Transfer-Encoding: binary");
      header("Content-Length: ".filesize($fichier));
      header("Expires: 0");
      @readfile($fichier);
}


En effet pour que le nom du fichier soit proposé dans la boîte de dialogue qui apparaît, il faut utiliser la fonction basename() dans Content-disposition: attachement; filename=.....

Je pense que c'est tout, mon test est 100% concluant. Maintenant il suffit d'un peu plus imagination pour améliorer (on peut tout imaginer).

Merci encore et A+
Le partage de connaissances grandit l'homme.
http://www.mazone.homelinux.net
Avatar de l’utilisateur
ticamoha
Premier-Maître
Premier-Maître
 
Messages: 55
Inscrit le: 09 Avr 2006 00:43
Localisation: Pas loin de l'autorute A10 ;-)

Messagepar mat67 » 28 Avr 2006 15:17

basename c'est pour avoir le chemin complet je suppose.

et ben c'est cool.

a+ :)
... Sea, sex and sun ? hmmm ... faudrait déjà qu'il y est le Sun ! ... YeY ! The Sun is back at last ! After 8 months ... Say Hey Hey ! ... naaaa il pleut ! ... ah de nouveau le soleil !!! AAAHHH HALSASS JO TEME !
Avatar de l’utilisateur
mat67
Lieutenant de vaisseau
Lieutenant de vaisseau
 
Messages: 245
Inscrit le: 23 Juin 2004 23:05
Localisation: Somewhere in Alsace ...


Retour vers E-Smith / SME Server

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité