Téléchargement de fichier de puis serveur

Résolu
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012 - 17 janv. 2012 à 06:04
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012 - 19 janv. 2012 à 05:40
Bonjour,

Je suis un novice.

voici ce que je fais:
J'ai crée un formulaire dans une page.php ('formulaire_entrer_donnee.php').
Ce formulaire permet de renseigner le nom, prenom ,...etc des clients.
De plus grâce à ce formulaire on peut "uploader" des fichiers qui sont ensuites stockés sur le serveur.

Une autre page .php('afficher_donnee.php') permet d'afficher toutes ces données sous forme d'un tableau dont la dernière colonne possède le lien à la page de téléchargement des fichiers "uploadés" ("/télécharger.php?nom_fichier='.$file.'");

Tout marche mise à part le fait que lorsqu'on clique sur le lien seulement une page blanche s'affiche, mais le téléchargement ne s'éxécute pas.

voici le code de la page télécharger.php:
<?php 
$file=$_GET['nom_fichier'];
$type =$_GET['type_fichier']; 

if (($file != "") && (file_exists("./" . basename($file)))) 
{ 
$size = filesize("./" . basename($file)); 
header("Content-Type:application/force-download; name="" . basename($file) . """); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $size"); 
header("Content-Disposition: attachment; filename="" . basename($file) . """); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile("./" . basename($file)); 
exit(); 
} 
?>


Dans les variables GET $file désigne le chemin complet au fichier à télécharger

7 réponses

cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012
19 janv. 2012 à 05:40
Enfin ça y est j'ai trouvé le problème:
Voici le code qui marche:

<?php

//print_r($_GET);

$chemin = $_GET['nom_fichier'];
$fichier = basename($chemin);

if (file_exists($chemin))
{
//echo 'yes'	;
header('Content-disposition: attachment; filename="' . $fichier . '"');	
header('Content-Type: application/force-download');	
header('Content-Transfer-Encoding: binary');	
header('Content-Length: '. filesize($chemin));	
header('Pragma: no-cache');	
header('Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0');	
header('Expires: 0');	
readfile($chemin);
}
else
{	
echo 'le fichier "' . $fichier . '" n\'existe pas. Veuillez-nous excusez pour le désagrément.chemin: '.$chemin;
}
 

?>



Les erreurs précédentes étaient dues aux faites que je faisais un echo avant les headers et de plus le chemin d'accés aux fichiers sur le serveur n'était pas le bon!...
3
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 janv. 2012 à 08:51
bonjour

essaie ça

<?php 
print_r($_GET);

if(isset($_GET['nom_fichier'])){
echo $file=urldecode($_GET['nom_fichier']);
$type =$_GET['type_fichier']=''; 

$rep="./"; /*a personnaliser*/

    if (($file != "") && (file_exists( $rep . basename($file)))) 
    { 
    	$size = filesize("./" . basename($file)); 
    	header("Content-Type:application/force-download; name="" . basename($file) . """); 
    	header("Content-Transfer-Encoding: binary"); 
    	header("Content-Length: $size"); 
    	header("Content-Disposition: attachment; filename="" . basename($file) . """); 
    	header("Expires: 0"); 
    	header("Cache-Control: no-cache, must-revalidate"); 
    	header("Pragma: no-cache"); 
    	readfile( $rep . basename($file)); 
    	exit(); 
    } 


}else{
echo 'verifier url';
}

?>
<!--
$filename = (isset($_GET['titre'])) ? rawurldecode($_GET['titre']) : ''; 

//$filename = $_GET['file'];

// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
  ini_set('zlib.output_compression', 'Off');

// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));

if( $filename == "" ) 
{
  echo "<html><title>eLouai's Download Script</title>
  ERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath</html>";
  exit;
} elseif ( ! file_exists( 'files/'.$filename ) ) 
{
  echo "<html><title>eLouai's Download Script</title>
  ERROR: File not found. USE force-download.php?file=filepath</html>";
  exit;
}
 else{

switch( $file_extension )
{
  
  case "mp3": $ctype="application/mp3"; break;
  /*
  case "pdf": $ctype="application/pdf"; break;
  case "exe": $ctype="application/octet-stream"; break;
  case "zip": $ctype="application/zip"; break;
  case "doc": $ctype="application/msword"; break;
  case "xls": $ctype="application/vnd.ms-excel"; break;
  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  */
  
  default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename="".basename($filename)."";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile('files/'.$filename);
exit('BonNE écoute !');
}
?>
-->


Bonne programmation !
0
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012
17 janv. 2012 à 12:24
ok merci cod57 pour ta réponse.

je vais essayer ce code que tu as proposé quand je retournerai au boulot.
0
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012
17 janv. 2012 à 23:37
ok j'ai essayer ton code avec un exemple: en 'uploadant' un fichier qui s'appelle 'Annuaire téléphonique.pdf' qui se trouve maintenant sur le serveur.
Le fichier a donc pour chemin absolu : 'C:\xampp\fichiers_charges\chrono\Annuaire téléphonique.pdf'

en testant ton code voici ce qui m'affiche a l'écran:

Array ( [nom_fichier] => C:\xampp\fichiers_charges\chrono\Annuaire téléphonique.pdf [type_fichier] => application/pdf ) C:\xampp\fichiers_charges\chrono\Annuaire téléphonique.pdf

Mais rien ne se passe, aucun téléchargement.J'ai essayé sur le serveur même et sur un autre poste sur le réseau.


Juste pour info je suis en nouvelle-calédonie et donc pour répondre à des messages venant de métropoles c'est pas du tout les même horaires.
merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 janv. 2012 à 10:00
bonjour

je reprend deux bouts de codes que j'ai corrigé cette semaine
pour un autre membre

index.php ( le form upload )





Upload d'un Pdf




Envoyer le fichier :













force.php






il faut un repertoire files/ a la base de c'est deux fichiers php

donc

index.php
force.php
files/

remarque : le script fonctionne sur wamp et ovh et free


Bonne programmation !
0
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012
19 janv. 2012 à 03:13
Bonjour merci pour ton code encore une fois .

Je l'ai testé:
- J' arrive donc à 'uploader' des fichiers sur le serveur.
De ce côté là ça marche.

- Mais encore une fois le téléchargement ne s'éxécute pas, lorsque je clique sur le bouton "download"
Voici ce qui m'affiche à l'écran:
Warning: filesize() [function.filesize]: stat failed for ./transport_num_43.pdf in C:\xampp\htdocs\test\force.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\force.php:12) in C:\xampp\htdocs\test\force.php on line 19
%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream x?SÛnÚ@}ç+F}iûÀ°÷]û€D!JÓw6?Ø®/ªòWý­üE×6?M ?%[?vÎ?9?s?ÁÝ? Ôð{pÁè?UHDÏ0?LJ€ å(Ð?¡V0d¹? Ü&t ?hß~Ø}?n,ž§*âŽÌ³¢?ôàß!Ú6ŽÇNâÔ©!jiµ£3²å??ã»IÂáÚ??D!Aqä jÒHyîHÙHÝG??žÐ?á?©À/_ß®`Œ{²NñUV?¿j[yp.RåãÇ>W ÷Ë[€?- ²eU?=è"-_?Œ¿€ëTfbDô?*/È9Á.Ê9?IÒ $äL?Ò íŠþ?­ÛÚÊ磎¹?w;[ [euÑÇ\%8?NÊÏÉíôúñ~~tW ?ÄýR?\ôuWÑ6¥-ëjñ°ì£D?º?ëbM'³è?i$r Ê¥±wÌ€4(xK:Ëö¡ï·&hŽÈëmÜŒ©?§â-NÏmõÀ?¬Lª$K?žŽ?â¡ÖYœ~}?óVr?ÄtñX¯³}¿€ï|õpóÇi¯!?ºë=ÝÌ?n?óÙêó$]þ8w]\ŠUßQ Ýjjš?ÝqÜ}ó¬¬?,µ`??^êÄ%poÝn}?B??nsÝ ?êÿJá*Ë endstream endobj 1 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj 2 0 obj << /ProcSet /Text /ImageB /ImageC /ImageI /Font << /F1 5 0 R /F2 6 0 R >> /XObject << >> >> endobj 7 0 obj << /Producer (FPDF 1.53) /CreationDate (D:20111227090356) >> endobj 8 0 obj << /Type /Catalog /Pages 1 0 R /OpenAction [3 0 R /FitH null] /PageLayout /OneColumn >> endobj xref 0 9 0000000000 65535 f 0000000660 00000 n 0000000942 00000 n 0000000009 00000 n 0000000087 00000 n 0000000747 00000 n 0000000844 00000 n 0000001056 00000 n 0000001132 00000 n trailer << /Size 9 /Root 8 0 R /Info 7 0 R >> startxref 1235 %%EOF

Apparement il essaie d'afficher le fichier en l'occurence ici 'transport_num_43.pdf'.

Pour info: avant de posté sur ce forum j'avais tester une première fois le code qui permet de télécharger.
Et pour la premère fois ça a marché ("affichage de la boîte de dialogue : enregistrer ou éxécuter ou annuler") mais pour les fois suivantes:rien.
Je ne pense pas avoir fait des modifs dans le code.

merci.
0
cs_nouvinfo Messages postés 6 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012
19 janv. 2012 à 04:03
n ya til pas un tuto sur le téléchargement en PHP?
0
Rejoignez-nous