Votre question

Problèmes script téléchargement

Tags :
  • Php
  • Script
  • Programmation
Dernière réponse : dans Programmation
6 Février 2012 20:51:58

Bonsoir à tous !
J'ai un soucis avec un script pour télécharger les fichiers mis à disposition pour les membres.

Tout d'abord voici la page qui liste les fichiers :
documents.php

  1. <?php
  2. /*
  3.   documents.php
  4.  
  5.   Copyright 2011 Les 3 Mousquetons <les3mousquetonsboulazacois@gmail.com>
  6.  
  7.   Version 1.0 - C2401
  8.  
  9.   This program is free software; you can not redistribute it and/or modify
  10.   it under the terms of the Creative Commons BY-NC-ND. */
  11.  
  12. /*
  13.  * Début du code source
  14.  */
  15.  
  16. $debut = microtime(true);
  17. header('Content-type: text/html; charset=utf-8');
  18. include('includes/config.php');
  19.  
  20. /* * ******Actualisation de la session...********* */
  21.  
  22. include('includes/fonctions.php');
  23. connexionbdd();
  24. $etat = en_ligne();
  25. actualiser_session();
  26.  
  27. /* * ******Fin actualisation de session...********* */
  28.  
  29. /* * ******En-tête et titre de page******** */
  30.  
  31. $titre = 'Liste des Documents';
  32.  
  33. include('includes/haut.php'); //contient le doctype, et début de head.
  34.  
  35. /* * ********Fin entête et titre********** */
  36. ?>
  37. <link rel="stylesheet" href="<?php echo ROOTPATH; ?>/styles/documents.css" type="text/css" media="screen" />
  38. </head>
  39.  
  40. <?php include('includes/menu.php'); ?>
  41.  
  42. <div id="map" style="text-align: left;">
  43. <a href="index.php">Accueil</a> => <a href="documents.php">Liste des documents à télécharger</a>
  44. </div>
  45.  
  46. <div id="corp">
  47. <?php
  48. connexionbdd();
  49. $retour = mysql_query('SELECT YEAR(date) AS annee FROM upload ORDER BY date LIMIT 0,1');
  50. $donnees = mysql_fetch_array($retour);
  51. $firstYear = $donnees['annee'];
  52. $retour = mysql_query('SELECT YEAR(date) AS annee FROM upload ORDER BY date DESC LIMIT 0,1');
  53. $donnees = mysql_fetch_array($retour);
  54. $lastYear = $donnees['annee'];
  55. echo '<div class="date">';
  56. for($i=$firstYear;$i<=$lastYear;$i++){
  57. if($i == date('Y', time()))
  58. echo ' <strong class="now"><a href="documents.php?annee='.$i.'">'.$i.'</a></strong>';
  59. else
  60. echo ' <a href="documents.php?annee='.$i.'">'.$i.'</a>';
  61. }
  62. echo '</div>';
  63. ?>
  64. <h1>Liste des documents disponibles au téléchargement</h1>
  65. <?php
  66. $liste_mois=array('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre',
  67. 'Novembre','Décembre');
  68. $mois=false;
  69. $annee=false;
  70. if(isset($_GET['annee'])){
  71. $anneeDebut = intval(strip_tags(trim($_GET['annee']))).'-01-01';
  72. $anneeFin = intval(strip_tags(trim($_GET['annee']))).'-12-31';
  73. }
  74. else{
  75. $anneeDebut = date('Y').'-01-01';
  76. $anneeFin = date('Y').'-12-31';
  77. }
  78. $reponse = mysql_query('SELECT id, name, size, filename, description, MONTH(date) AS mois, YEAR(date) AS annee FROM upload WHERE date>=\''.$anneeDebut.'\' AND date<=\''.$anneeFin.'\' ORDER BY date DESC');
  79. while($donnees=mysql_fetch_array($reponse)){
  80. if($annee!=$donnees['annee']){
  81. $annee = $donnees['annee'];
  82. if($mois!=$donnees['mois']){
  83. $mois=$donnees['mois'];
  84. }
  85. echo '<h2>'.$liste_mois[$donnees['mois']].' '.$donnees['annee'].'</h2>';
  86. }
  87. else{
  88. if($mois!=$donnees['mois']){
  89. $mois=$donnees['mois'];
  90. echo '<h2>'.$liste_mois[$donnees['mois']].' '.$donnees['annee'].'</h2>';
  91. }
  92. }
  93. $size_octet = $donnees['size'];
  94. $size_mega = $size_octet/1024/1024;
  95.  
  96. $name = $donnees['filename'];
  97. $name = preg_replace('#([a-z0-9._-]+)\.pdf#isU', '$1.cpt' ,$name);
  98. $name = 'upload/cpt/'.$name;
  99. if(!file_exists($name)){
  100. $cpt = 0;
  101. }
  102. else{
  103. $compteur = fopen($name, 'r');
  104. $cpt = fgets($compteur);
  105. }
  106. echo '<h3><a href="telecharger.php?id='.$donnees['id'].'">'.$donnees['name'].' ('.round($size_mega, 3).'Mo - '.$size_octet.'octets)</a></h3>
  107. <span class="description">'.$donnees['description'].' - <em>Télécharger : '.$cpt.'</em></span>';
  108. }
  109. ?>
  110. </div>
  111.  
  112. <?php
  113. include('includes/bas.php');
  114. ?>


telecharger.php :
  1. <?php
  2. /*
  3.   telecharger.php
  4.  
  5.   Copyright 2011 Les 3 Mousquetons <les3mousquetonsboulazacois@gmail.com>
  6.  
  7.   Version 1.0 - C2401
  8.  
  9.   This program is free software; you can not redistribute it and/or modify
  10.   it under the terms of the Creative Commons BY-NC-ND. */
  11.  
  12. /*
  13.  * Début du code source
  14.  */
  15.  
  16.  
  17. include('includes/config.php');
  18. include('includes/fonctions.php');
  19.  
  20. $id = intval(strip_tags(trim($_GET['id'])));
  21. connexionbdd();
  22. $reponse = mysql_query('SELECT * FROM upload WHERE id="'.$id.'"') or die(mysql_error());
  23. $donnees = mysql_fetch_array($reponse);
  24.  
  25. /*/echo '<pre>';
  26.  
  27. print_r($donnees);
  28.  
  29. echo '</pre>';/**/
  30.  
  31. header('Content-Type: '.$donnees['type'].'; charset=utf-8'); //Transfert en binaire (fichier)
  32. header('Content-Disposition: attachment; filename="'.$donnees['name'].'"'); //Nom du fichier
  33. header('Content-Length: '.$donnees['size'].''); //Taille du fichier
  34.  
  35. $files = ROOTPATH.'/upload/'.$donnees['filename'];
  36.  
  37. /*/echo $files.'<br />';
  38. echo $donnees['name'].'<br />';
  39. echo $donnees['size'].'<br />';
  40. echo $donnees['description'].'<br />';
  41. echo $donnees['filename'].'<br />';
  42. echo $donnees['type'];/**/
  43.  
  44. /*
  45.  * Partie sur le compteur de téléchargement
  46.  */
  47.  
  48. //ouverture du fichier
  49. $name = $donnees['filename'];
  50. $name = preg_replace('#([a-z0-9._-]+)\.pdf#isU', '$1.cpt' ,$name);
  51. $name = 'upload/cpt/'.$name;
  52. if(!file_exists($name)){
  53. $compteur = fopen($name, 'a+');
  54. fputs($compteur, '1');
  55. }
  56. else{
  57. $compteur = fopen($name, 'r+');
  58. $actuel = fgets($compteur);
  59. $new = $actuel + 1;
  60. fseek($compteur, 0);
  61. fputs($compteur, $new);
  62. }
  63.  
  64. //fermeture du fichier
  65. fclose($compteur);
  66.  
  67. readfile($files);
  68. ?>


Donc le soucis est quand on clique pour télécharger un fichier on a un fichier de 0 octets !
Voici un screeshot :


Ma BDD contient :
- un id
- le nom du fichier réel avec extension
- la taille en octets
- la description
- la date
- le nom du fichier sur le serveur avec extension
- le type mime

Je vous remercie par avance !

Cordialement

Autres pages sur : problemes script telechargement

a c 232 L Programmation
7 Février 2012 00:17:58

Salut,

Essaie de faire du débug, de voir quelles sont les variables retournées dans ton tableau $donnes, de vérifier qu'elles sont correctes.
Et vérifie aussi la variable $files, qu'elle pointe au bon endroit.
7 Février 2012 08:46:35

Les variables sont bonnes.
Si je décommente les lignes dans telecharger.php, ça m'affiche cela :
  1. Array
  2. (
  3. [0] => 8
  4. [id] => 8
  5. [1] => Convoc AG 2012.pdf
  6. [name] => Convoc AG 2012.pdf
  7. [2] => 34177
  8. [size] => 34177
  9. [3] => Convocation à l'Assemblé Général de 2012
  10. [description] => Convocation à l'Assemblé Général de 2012
  11. [4] => 2012-02-06
  12. [date] => 2012-02-06
  13. [5] => 06022012_4f2fa2921991b.pdf
  14. [filename] => 06022012_4f2fa2921991b.pdf
  15. [6] => application/pdf
  16. [type] => application/pdf
  17. [7] => 0
  18. [counter] => 0
  19. )
  20.  
  21. http://escalade.fr/upload/06022012_4f2fa2921991b.pdf
  22. Convoc AG 2012.pdf
  23. 34177
  24. Convocation à l'Assemblé Général de 2012
  25. 06022012_4f2fa2921991b.pdf
  26. application/pdf


$files et la première ligne après le Array, et elle pointe au bon endroit.

Je ne vois pas d'où cela peut venir.
Contenus similaires
9 Février 2012 12:06:26

Toujours pas d'aide ?
Le président du club me demande de finir le site pour Mars...

Merci d'avance pour vos réponses !

Cordialement !
a c 232 L Programmation
9 Février 2012 13:39:16

Désolé pour le retard, j'avais laissé l'onglet avec ta question ouvert, mais j'ai pas pris le temps de regarder en détails.

je crois que le soucis vient de la fonction readfile qui prend un chemin absolu sur l'ordinateur (C:\.... sous Windows ou /... sous Unix), et pas un chemin internet (http://...)
10 Février 2012 08:04:16

D'accord !
J'ai tenté de faire un file_exist(), de cette manière :
  1. <?php
  2. if(!file_exist($file)){
  3. echo 'Fichier introuvable !';
  4. }

Et j'ai eu le message qui c'est affiché..

J'ai donc modifier les deux lignes suivantes :
  1. $name = 'upload/cpt/'.$name;
  2. $files = ROOTPATH.'/upload/'.$donnees['filename'];

Comme ceci :
  1. $name = './upload/cpt/'.$name;
  2. $files = './upload/'.$donnees['filename'];

Et cette fois-ci ça fonctionne !

J'avais un problème pour mettre à jour le compteur, j'ai donc tenté une mise à jour de la BDD :
  1. $counter = $donnees['counter']++;
  2. mysql_query('UPDATE upload SET counter="'.$counter.'" WHERE id="'.$id.'"') or die(mysql_error());

Mais cela ne mets pas à jour la BDD...

Sinon, ça bugué avec le fichier texte, mais cela venait de SELinux sous Fedora qui me le bloquait par défaut, ce qui est résolu.

Une idée pour la BDD ?
a c 232 L Programmation
10 Février 2012 09:32:05

Est-ce que tu as une erreur lors de l'exécution de la requête ?
Et tu as vérifié que la requête générée était correcte ? (un petit echo)
10 Février 2012 11:12:09

OmaR a dit :
Est-ce que tu as une erreur lors de l'exécution de la requête ?
Et tu as vérifié que la requête générée était correcte ? (un petit echo)


Alors, je n'ai aucune erreur, et quand je mets le résultat dans une variable, et que j'affiche cette variable avec un écho, je vois affiché '1'.

a c 232 L Programmation
10 Février 2012 11:41:31

Je ne parle pas de mettre le résultat dans un echo, mais de mettre la requête "UPDATE ...."
Comme ça tu vérifies que la valeur $counter est bonne, ainsi que celle de $id
10 Février 2012 14:17:15

OmaR a dit :
Je ne parle pas de mettre le résultat dans un echo, mais de mettre la requête "UPDATE ...."
Comme ça tu vérifies que la valeur $counter est bonne, ainsi que celle de $id


Ben, j'ai testé y avait une erreur avec $counter = $donnees['counter'] ++, en fait c'est $counter = $donnees['counter'] + 1
Ensuite, j'ai eu un second, bug, plus rien ne se passer.
J'ai enlever le or die(mysql_error()) et tout fonctionne parfaitement !

Merci pour ton aide !

Cordialement !
a b L Programmation
10 Février 2012 22:36:14

Batman qui aide Chucky, on aura tout vu. :D 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS