IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Forcer le téléchargement FTP


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut Forcer le téléchargement FTP
    J'expose mon problème: Je suis entrain de créer un client FTP en version WEB pour une société qui a besoin de le faire fonctionner sur PC/TABLETTE/SMARTPHONE, la problématique est que je n'arrive pas à forcer le téléchargement des fichiers qui se trouvent sur leur FTP, pour ça il faut qu'une boite de dialogue apparaisse pour donner au client le choix du dossier de destination, or avec le ftp_get, ça télécharge sans avoir la possibilité de choisir le dossier de téléchargement, et avec les headers je suis obligé de passer par ftp://, sauf qu'il y a des smartphones qui n'acceptent pas le protocole ftp.

    Voici une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    if(!ftp_is_dir($dir))
    				{
    					if (!@filesize($ftp, $dir) == -1)
    					{						
    						//ftp_get($ftp, $local_file, $dir, FTP_BINARY);
     
    						/*$Fichier_a_telecharger = $local_file;
    						$chemin = ftp_get($ftp, $local_file, $dir, FTP_BINARY);
     
    						switch(strrchr(basename($Fichier_a_telecharger), ".")) 
    						{
    							case ".gz": $type = "application/x-gzip"; break;
    							case ".tgz": $type = "application/x-gzip"; break;
    							case ".zip": $type = "application/zip"; break;
    							case ".pdf": $type = "application/pdf"; break;
    							case ".png": $type = "image/png"; break;
    							case ".gif": $type = "image/gif"; break;
    							case ".jpg": $type = "image/jpeg"; break;
    							case ".txt": $type = "text/plain"; break;
    							case ".htm": $type = "text/html"; break;
    							case ".html": $type = "text/html"; break;
    							default: $type = "application/octet-stream"; break;
    						}
     
    						header('Content-type:force-download'); 
    						header('Content-Disposition: attachment; filename='.$Fichier_a_telecharger); 
    						readfile($chemin);*/
     
    						//echo ("<a href=\"ftp://$login:$pwd@$host:$port/$dir\">Télécharger $dir</a>");
    						/*if (ftp_get($ftp, $local_file, $dir, FTP_BINARY)) 
    						{
    							echo "Le fichier $local_file a été enregistré\n";
    						} else {
    							echo "Il y a un problème\n";
    						}*/
    					}
    				}else
    				{
    					echo ("<a href=\"#\" onclick=\"Rename('".$fichier."')\">Renommer le dossier</a>&nbsp;");
    					echo("<a href=\"#\" onclick=\"confirme('".$fichier."')\">Supprimer</a>&nbsp;");
    					echo("<a href='?fichier=".htmlspecialchars($fichier, ENT_QUOTES, 'ISO-8859-1')."'>$local_file</a>"."<br/>");					
    				}
    Merci à vous !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu l'ouvres en stream ftp coté serveur et tu l'envoie en stream en http pour le client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy('ftp://user:pass@tonserverftp/lefichier', 'php://output');
    ps : pas besoin de l'extension FTP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Justement tu as utilisé le protocole ftp, avec le ftp:// . Il y a des smartphones qui ne pourront pas le lire.

    Merci à toi

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par 9-THUG Voir le message
    Justement tu as utilisé le protocole ftp, avec le ftp:// . Il y a des smartphones qui ne pourront pas le lire.

    Merci à toi
    PHP c'est coté serveur pas client ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Ah d'accord, autant pour moi, est ce que c'est possible de me donner un peu plus de précisions sur le code à faire ou un exemple ? car j'ai cherché dans la doc le php://output mais ce n'est pas très bien expliquer et aussi je ne suis pas pro en php, donc je ne sais pas le traitement à faire par la suite.

    Merci à toi

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    y'a aucun traitement a faire juste (et finalement pas besoin de copy)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('Content-type:force-download'); 
    header('Content-Disposition: attachment; filename='.$Fichier_a_telecharger); 
    readfile('ftp://user:pass@tonserverftp/lefichier');
    et c'est tout

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    J'avais déjà essayé cette solution mais le fichier téléchargé est vide, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    foreach($liste_fichiers as $fichier)
    			{
    				$local_file = strrchr($fichier, '/');
    				if($local_file[0] == "/")
    				{
    					$local_file = substr($local_file, 1);
    				}
     
     
    				//Test si c'est un dossier ou un fichier
    				if(!ftp_is_dir($dir))
    				{
    					if (!@filesize($ftp, $dir) == -1)
    					{
    						$chemin = "ftp://".$_SESSION['login'].":".$_SESSION['pwd']."@".$host."/".$fichier;
    						header('Content-type:force-download'); 
    						header('Content-Disposition: attachment; filename='.$local_file); 
    						readfile($chemin);
    					}
    				}else
    				{
    ?>
          <tr>
            <?php if($_SESSION['droit'] == 'admin')
    		{
    		?>
    			<td><?php echo ("<a href=\"#\" onclick=\"Rename('".$fichier."')\">Renommer le dossier</a>&nbsp;");
    					echo("<a href=\"#\" onclick=\"confirme('".$fichier."')\">Supprimer</a>&nbsp;"); ?></td>
    		<?php 
    		} 
    		?>
    Merci

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu peux pas faire de boucle, après ton readfile il faut un exit

    je te conseil de séparer ton code en plusieurs fichier

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Je suis obligé de faire la boule foreach pour afficher tous les dossiers et fichiers sur le FTP, j'ai essayé de le faire marcher mais toujours rien, je télécharge le fichier vide

    Merci

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est normale tu peux pas envoyer plusieurs fichier

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    non je n'envoie qu'un seul fichier, la boucle c'est juste pour afficher toute la liste des fichiers, une fois on clique sur un fichier qu'on veut, je prend l'arborescence du fichier.

    Le seul problème est que le fichier téléchargé est vide, après le debug j'ai constaté que le lien que je donne au header est bien le bon lien pour ouvrir le fichier.

    Je peux te passer mon code si tu veux plus de détails pour comprendre ma démarche.

    Je te remercie sincèrement de ton aide et du mal que tu te donnes pour m'aider !

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu vois bien que dans ton code tu boucles sur le header

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Comment puis je faire pour afficher tous les fichiers, tester si c'est un dossier ou un fichier, si c'est un fichier je force le téléchargement ?

    Merci

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    comment tu choisis le fichier a envoyer ? puisque tu peux en envoyer qu'un seul

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Dans le code là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!ftp_is_dir($dir))
    				{
    					if (!@filesize($ftp, $dir) == -1)
    					{
    						echo("<a href=\"ftp://".$_SESSION['login'].":".$_SESSION['pwd']."@".$host.":".$port."/".$fichier."\">Télécharger</a>");
    					}
    Je teste si c'est un dossier ou pas, si c'est un fichier, une fois on clique dessus, il affiche télécharger qui une fois on clique dessus, on arrive à lire le pdf par exemple.

    Je peux te passer les identifiants du FTP pour tester si tu veux

    Merci

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Non Ok j'ai compris,

    sépare ton code en 2 fichiers

    - l'affichage des fichiers
    - le téléchargement

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Je ne vois pas comment faire pour séparer le code, car pour télécharger le fichier il faut récupérer son chemin, et ce dernier ne peut etre récupérer que dans la boucle, voici tout mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    <?php 
    	session_start(); 
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Serviacom Proaccess FTP</title>
    <script language="javascript">
     
    	 function Prompt(dir)
    	  {
           var saisie = prompt("Entrer le nom du dossier :", "Nouveau dossier")
           if (saisie!=null) {
    	  document.location.href = "adddir.php?nom="+saisie+"&dossier="+dir ;
    		}
          }
     
    	  function Rename(dir)
    	  {
           var saisie = prompt("Entrer le nom du dossier :", "Nouveau dossier")
           if (saisie!=null) {
    	  document.location.href = "rename_dir.php?nom="+saisie+"&dossier="+dir ;
    		}
          }
     
    	  function confirme(identifiant, origine )
          {
            var confirmation = confirm( "Voulez vous vraiment supprimer ce dossier?" ) ;
    		if( confirmation )
    		{
    		  document.location.href = "del_dir.php?id="+identifiant+"&origin="+origine ;
    		}
          }
     
    </script>
    </head>
     
     
    <?php
    	include("verif.php");
    	include("functions.php");
    	include("connexion_ftp.php");
    	include("lang.php");
    ?>
     
    <body>
    <p>Bienvenue <?php echo $_SESSION['login'];?></p>
    <p>
      <?php
    	if(isset($_SESSION['login'])) 
    	{
    		$login = $_SESSION['login'];
    		$pwd = $_SESSION['pwd'];
    		//Récupère dossier selectionné
    		if(isset($_GET['fichier']))
    		{
    			$dir = $_GET['fichier'];	
    		}else
    		{
    			$dir = ".";
    		}
     
    		$liste_fichiers = ftp_nlist($ftp, $dir);
     
    		//Test si le lien du fichier est valide
    		if (!$liste_fichiers)
    		{
    			echo "Ce dossier est vide";
    			//header("Refresh:2, Url= 'javascript:history.back();'");
    		}
     
     
    ?>
    <div align="center">
        <table width="474" height="87" border="1">
          <tr>
            <?php if($_SESSION['droit'] == 'admin')
    		{
    		?>
            	<td width="114" height="34"><?php echo $tous ?></td>
            <?php
    		}
    		?>
            <td width="228"><?php echo $nom ?></td>
            <td width="110"><?php echo $taille ?></td>
          </tr>
          <?php
      //Liste les fichiers
    		foreach($liste_fichiers as $fichier)
    			{
    				$local_file = strrchr($fichier, '/');
    				if($local_file[0] == "/")
    				{
    					$local_file = substr($local_file, 1);
    				}
     
     
    				//Test si c'est un dossier ou un fichier
    				if(!ftp_is_dir($dir))
    				{
    					if (!@filesize($ftp, $dir) == -1)
    					{
    						/* $chemin = "ftp://".$_SESSION['login'].":".$_SESSION['pwd']."@".$host."/".$fichier;
    						header('Content-type:force-download'); 
    						header('Content-Disposition: attachment; filename='.$local_file); 
    						readfile($chemin);
    						exit(); */
    						echo("<a href=\"ftp://".$_SESSION['login'].":".$_SESSION['pwd']."@".$host.":".$port."/".$fichier."\">Télécharger</a>");
    					}
    				}else
    				{
    ?>
          <tr>
            <?php if($_SESSION['droit'] == 'admin')
    		{
    		?>
    			<td><?php echo ("<a href=\"#\" onclick=\"Rename('".$fichier."')\">Renommer le dossier</a>&nbsp;");
    					echo("<a href=\"#\" onclick=\"confirme('".$fichier."')\">Supprimer</a>&nbsp;"); ?></td>
    		<?php 
    		} 
    		?>
            <td><?php echo("<a href='?fichier=".htmlspecialchars($fichier, ENT_QUOTES, 'ISO-8859-1')."'>$local_file</a>"."<br/>");?></td>
            <td><?php $file = ftp_size($ftp, $fichier);				
    				if($file != -1)
    				{
    					$file = $file / 1048576;
    					$pos = stripos($file, '.');
    					$file = substr($file, 0, $pos+3);
    					echo $file." Mo";
    				}else
    				{
    					echo "0";
    				}
    			 ?></td>
            <?php
    				}
    			}
    ?>
          </tr>
        </table>
      </div>
     
      <?php
     
    				ftp_close($ftp);	
     
    			if($_SESSION['droit'] == "admin")
    			{
     
    echo ("</p>
    <p><a href=\"#\" onclick=\"Prompt('".$dir."')\">Créer un dossier</a></p>")?>
     
    <p><a href="gestion_compte.php">Gérer les comptes</a></p>
    <?php 		
    			}
    	}
    ?>
    <p><a href="logout.php">Déconnexion</a></p>
    </body>
    </html>
    </body>
    </html>
    Merci

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Pas de solution ??

    Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/12/2009, 15h20
  2. [PHP-JS] Forcer le téléchargement d'une image JPG
    Par Amnesiak dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 23h50
  3. Réponses: 2
    Dernier message: 23/03/2005, 08h51
  4. [Windows 2000 server] Téléchargement FTP impossible sous IE6
    Par o151181 dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 24/11/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo