Probléme de telechargement coté internaute

Mammouth du PHP | 620 Messages

15 nov. 2009, 15:50

bonjour,
sur mon site internet j'ai mis en place une galerie de PPS que je propose a mes internautes.
pour ajouter un PPS sur mon ftp j'ai donc un interface admin. l'upload des fichiers PPS est ok et si je verifie en distant si le fichier est bon j'ai bien un fichier avec par exemple monfichier.pps

maintenant, pour mes internautes, j'ai créé un page sur laquel je met un lien pour telecharger les pps. Le probleme est là ! lorsuq'un internaute veut telecharger un pps au lieu de telecharger par exemple monfichier.pps il telecharge monficier.ppt

je ne comprend pas comment celà est possible car a aucun moment je ne modifi ou touche a l'extension du fichier que se soit à l'upload comme au download.

auriez vous déjà rencontrer ce genre de probleme ? Comment pourrais-je regler ça ?

Eléphant du PHP | 288 Messages

15 nov. 2009, 21:38

Peux-tu afficher ton code de telechargement.

Mammouth du PHP | 620 Messages

16 nov. 2009, 15:33

Voici le lien sur la page ou les internautes peuvent telecharger les pps :
<?PHP  echo "<a href=\"clicspps.php?id=".$data["id"]."\" target='_blank'><img src=\"../images/download.png\" width=\"45\" height=\"32\" border=\"0\" alt=\"Visionner le PPS\"></a>";?>

voici ma page clicpps.php :
<?php

$id = (int)$_GET['id']; 
// on recupere les informations du PPS pour avoir le lien ainsi que le nbr de clics 

$sql = mysql_query("SELECT * FROM ppspv WHERE id='$id'"); 
$ppspv = mysql_fetch_array($sql); 

// maintenant on ajoute un clic puis on redirige 
$result=mysql_query("update ppspv set nbrclics=nbrclics+1 where id='$id'") or die (mysql_error()); 
// on redirige 
header("location: ../images/pps/".$ppspv['pps']); 
exit(); 
?> 

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 nov. 2009, 15:37

Bonjour,

Commence par remplacer ton header("location...") par un simple lien vers le fichier pps afin de vérifier que le lien vers le fichier se termine bien par .pps

Si ce n'est pas le cas, c'est que tu as un problème dans ta variable $ppspv['pps']
Si c'est bien le cas, alors que ce passe-t-il en cliquant sur le lien? Tu as une popup du navigateur "Télécharger le fichier..." qui te propose un .ppt?
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 620 Messages

16 nov. 2009, 15:48

j'ai changer l'header par un lien complet et rien ne change. toujours le ppt au lieu du pps.
et non pas de popup juste "Télécharger le fichier..." qui est en ppt au lie de pps.

Mammouth du PHP | 620 Messages

17 nov. 2009, 00:38

Bonsoir,
Je n'ai toujours pas trouvé la solution. J’ai essayé plusieurs méthodes mais rien ne change.
Par exemple au lieu de passer par un bouton télécharger je rentre dans ma barre d'adresse le chemin complet de l'emplacement de mon pps avec la bonne extension et même là lorsque j'ai la fenêtre "voulez vous ouvrir ou enregistrer ce fichier..." c'est une extension ppt que l'on me propose.
J’ai revérifié en ftp si mes fichiers étaient bien tous des .pps et oui ils le sont tous. Aucuns ppt et a aucun moment on ne trouve d'extension ppt.
Je ne comprends rien du tout !

Je viens juste de faire un autre essai mais cette foi ci en changeant de navigateur. Actuellement je testais les téléchargements sur IE6-7-8 et j'ai ce problème avec tous les ie testés.
J’ai testé sur FF3 le fichier téléchargé est bien un PPS
Sous safari idem que pour Internet explorer .PPT
Sous Opéra ok on a bien un PPS
Sous googlechrome ok on a bien un PPS

Alors pourquoi sous IE et SAFARI on télécharge des PPT ?

Eléphant du PHP | 369 Messages

17 nov. 2009, 15:02

Salut,
Bonsoir,
Je n'ai toujours pas trouvé la solution. J’ai essayé plusieurs méthodes mais rien ne change.
Par exemple au lieu de passer par un bouton télécharger je rentre dans ma barre d'adresse le chemin complet de l'emplacement de mon pps avec la bonne extension et même là lorsque j'ai la fenêtre "voulez vous ouvrir ou enregistrer ce fichier..." c'est une extension ppt que l'on me propose.
J’ai revérifié en ftp si mes fichiers étaient bien tous des .pps et oui ils le sont tous. Aucuns ppt et a aucun moment on ne trouve d'extension ppt.
Je ne comprends rien du tout !
Je viens juste de faire un autre essai mais cette foi ci en changeant de navigateur. Actuellement je testais les téléchargements sur IE6-7-8 et j'ai ce problème avec tous les ie testés.
J’ai testé sur FF3 le fichier téléchargé est bien un PPS
Sous safari idem que pour Internet explorer .PPT
Sous Opéra ok on a bien un PPS
Sous googlechrome ok on a bien un PPS
Alors pourquoi sous IE et SAFARI on télécharge des PPT ?
Problème déja soulevé avec IE et sa clique.

Si tu compresses les fichiers proposés à l'upload tu n'auras plus ce soucis...
Ca deviendra juste inconfortable pour les clients.

@+ bon code ;)

Mammouth du PHP | 620 Messages

17 nov. 2009, 16:38

bonjour, qu'entends tu par compressés les fichiers à l'upload ? Les zipper c'est ça ?
n'y a t'il pas une autre solution car sa oblige l'internaute a avoir un programme de decompression sur son pc se qui n'est pas le cas de tout le monde.

Eléphant du PHP | 369 Messages

17 nov. 2009, 17:44

Re,
bonjour, qu'entends tu par compressés les fichiers à l'upload ? Les zipper c'est ça ?
Yep ;)
n'y a t'il pas une autre solution car sa oblige l'internaute a avoir un programme de decompression sur son
pc se qui n'est pas le cas de tout le monde.
Malheureusement je ne vois pas comment empécher IE d'agir comme ca.
Attend confirmation, tout de même, mais peu probable qu'on te réponde autre chose.

@+ ;)

Mammouth du PHP | 985 Messages

18 nov. 2009, 11:27

Et si simplement au lieu d'utiliser un header location tu utilises la fonction readfile().
En spécifiant avant les 2 headers application/octet-stream et Content-Transfer-Encoding: binary.
Exemple:
// téléchargement
$fichier = '../images/pps/' . $ppspv['pps'];
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
readfile($fichier);
Lien:
http://php.net/manual/fr/function.readfile.php
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.