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

Langage PHP Discussion :

[FTP] Transfert FTP sur dédié


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut [FTP] Transfert FTP sur dédié
    Salut à tous,

    J'essaye péniblement d'envoyer un fichier par ftp via un formulaire HTML, scénario classique ... J'ai trouvé des explications sur l'upload http via formulaire mais voilà dans le cas présent, j'ai la contrainte de passer par ftp (serveur vsftpd sur hébergement dédié qui fonctionne bien) ... Avant, il n'arrivais pas à se connecter, et maintenant, j'ai pas d'erreur mais il ne m'upload pas mon fichier ... ça m'avance pas des masses.

    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
     
    <?php 
    // SI LE FORMULAIRE A ETE ENVOYE
    if (isset($_POST['upload'])){
        // SI LE FICHIER A UPLOADER N EST PAS SPECIFIE
            if(($_POST['LocalPDF'] == "") || ($_POST['Choix'] == "VotreChoix") ) {
    	echo('<span class="erreur">Veuillez sp&eacute;cifier le fichier a uploader' . '</br>' .'et votre choix SVP</span>');
    	}
    	else{
    		// ON TRAITE LA DEMANDE
    		$ftp_server = "ftp.mondomaine.fr";
    		$ftp_user_name = "monloginFTP";
    		$ftp_user_pass = "monpassFTP";
    		$source_file = $_POST['LocalPDF'];
    		// POUR TESTER EN LOCAL
    		eregi_replace("C:\wamp\www", '/', $source_file); 
    		$fichier=$_POST['LocalPDF'];
    		//fichier de destination
    		$path_parts = pathinfo($fichier);
    		$destination_file=$path_parts['filename'] . '.' . $path_parts['extension'];
    		// connnection au serveur FTP
    		$conn_id = ftp_connect($ftp_server, 21, 5);
    		$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
     
    		// Vérification de la connexion
    		if ((!$conn_id) || (!$login_result)) { 
                      echo '<span class="erreur"> La connexion FTP a &eacute;chou&eacute; ! </span>';
    	          echo '<span class="erreur">Tentative de connexion au serveur ' . $ftp_server . ' pour l\'utilisateur' . $ftp_user_name . '</span>'	; 
        	    	  exit; 
    	    	} else {
        	    		echo '<span class="erreur">Connexion au serveur ' . $ftp_server.', pour l\'utilisateur '. $ftp_user_name. '$destination_file = ' . $destination_file . ' $source_file = ' . $source_file .'</span>' ;
        			}
     
    		// Chargement du fichier
    		$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); 
     
    		// Vérification du status du chargement
    		if (!$upload) { 
       		   echo "Le chargement FTP a &eacute;chou&eacute; !";
    		} 
                    else {
        		   echo "Chargement de $source_file vers $ftp_server en tant que $destination_file";
    	    	}
    		// Fermeture du flux FTP
    		ftp_close($conn_id); 
    	}
    }
    ?>
     
     
    <html>
    <head>
    <title>Envoyer un fichier PDF</title>
    </head>
    <body>
    <p>
    <form action="" method="post" name="uploadPDF" enctype="multipart/form-data">
    <table width="350" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
        <tr><td>
          <select name="Choix" id="Choix">
          <option value="VotreChoix">VotreChoix</option>
          <option value="Choix1">Choix1</option>
              <option value="Choix2">Choix2</option>
          <option value="Choix3">Choix3</option>
          </select>
        </td></tr>
        <tr>
        	<td>Fichier &agrave; t&eacute;l&eacute;charger</td>
            <td><input type="file" id="LocalPDF" name="LocalPDF"></td>
        </tr>
        <tr><td  height="50" colspan="2"><div align="center"><input type="submit" name="upload" value="envoyer le fichier"></div></td></tr>
    </table>
    </form>
    </p>
    </body>
    </html>

  2. #2
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Points : 291
    Points
    291
    Par défaut
    Vérifie que ton serveur n'est pas en mode passif.
    Dans ce cas essaye la fonction ftp_pasv( $conn_id , true)
    à mettre avant le ftp_put.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    J'ai fait ce que tu m'as dit et là il me répond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Warning: ftp_put(bg.png) [function.ftp-put]: failed to open stream: No such file or directory in C:\wamp\www\mapage.php on line 54
     
    Le chargement FTP a échoué !
    // //  ça ça vient de
    		if (!$upload) { 
       		   echo "Le chargement FTP a &eacute;chou&eacute; !";
    		}



    J'ai fait un echo qui me donne pourtant bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $destination_file = bg.png 
    $source_file = bg.png
    Apparemment, il arrive à se connecter mais il ne charge pas l'image "bg.png"

    Sous filezilla je me connecte sans prob ... c'est frustant

  4. #4
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Points : 291
    Points
    291
    Par défaut
    Peux tu essayer la fonction ftp_rawlist à la place de ftp_put ?
    (Je serai de retour vers 12h00)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    Il me renvoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le chargement FTP a échoué !
    je l'ai mis ainsi à la place de ftp_put
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ftp_rawlist($conn_id, '/'); 
    // Vérification du status du chargement
    if (!$upload) {

    (Je suis sous WAMP5 APACHE2 PHP5 MySQL5)

    En tout cas c'est super sympa de me filer un coup de main, surtout en ce moment

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est votre client qui doit établir la connexion FTP puis lui envoyer le fichier. Le serveur HTTP ne peut pas le faire à sa place, il ne peut faire office que d'intermédiaire ce qui signifie que le client devrait d'abord lui envoyer le fichier par HTTP (Upload de fichiers en PHP) pour que ce dernier le retransmette au serveur FTP.

    (L'exception où ça fonctionne est en local : le client et le serveur HTTP sont sur une même machine)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    Merci beaucoup, même en ces périodes de fêtes je vois que vous êtes toujours très actif, c'est super !

    Si je comprends bien, lorsque je télécharge un fichier txt par exemple sur un serveur apache via une page php avec comme navigateur firefox, ce qui se passe c'est :
    - requette http sur APACHE
    - Apache envoi le fichier au serveur FTP
    - Apache envoi le fichier au client via ftp

    c'est bien ça ? en fait tous les tutos de transferts ftp qu'on trouve ne sont valables qu'après le passage du fichier d'apache vers le serveur FTP. J'ai bien compris ou je me plante ? Dans les autres langage c'est la même chose ? C'est du au fait que ce soit 2 daemons qui gère 2 choses différentes : HTTP et FTP ou c'est du fait qu'on initialise une demande de téléchargement FTP sur le port 21 du serveur initié par un navigateur qui demande implicitement une communication sur le port port 80 du serveur ? ou c'est du aux 2 ?
    (histoire que je reposte pas la même chose dans 2-3 ans sur un autre langage )

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par popovitch130
    Si je comprends bien, lorsque je télécharge un fichier txt par exemple sur un serveur apache via une page php avec comme navigateur firefox, ce qui se passe c'est :
    - requette http sur APACHE
    - Apache envoi le fichier au serveur FTP
    - Apache envoi le fichier au client via ftp
    Non ça dépend de l'opération en fait :
    • Envoi d'un fichier : client => serveur HTTP => serveur FTP
    • Réception d'un fichier : serveur FTP => serveur HTTP => client

    (=> symbolisant le transfert du fichier)
    Il y a ici double transfert du fichier : ça demande donc un temps d'exécution du script qui est +/- doublé et les diverses limites de PHP sont appliquées (tant en upload qu'en temps d'exécution)

    Citation Envoyé par popovitch130
    C'est du au fait que ce soit 2 daemons qui gère 2 choses différentes : HTTP et FTP ou c'est du fait qu'on initialise une demande de téléchargement FTP sur le port 21 du serveur initié par un navigateur qui demande implicitement une communication sur le port port 80 du serveur ? ou c'est du aux 2 ?
    C'est simplement dû au fait que vous faites intervenir un serveur HTTP, qui fait office d'intermédiaire. Le plus simple étant bien sûr de pouvoir établir directement une connexion FTP du client (FTP donc plus par le navigateur à moins d'un composant ou d'une applet) au serveur FTP (il n'y a plus de serveur HTTP pour jouer les intermédiaires entre les deux : c'est plus économique / propre, plus de problèmes de permissions, etc).

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 268
    Points : 128
    Points
    128
    Par défaut
    Je vous remercie, ça fonctionne !

    Pour info :
    Avec cette config et VsFTPd vous devez vous mettre en mode passif sans quoi il vous renvoi "illegal port command". Bonne prog à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [proFTPd] Ecouter sur un autre port que 21 pour les transferts FTP
    Par razbitume dans le forum Administration système
    Réponses: 9
    Dernier message: 05/08/2009, 18h36
  2. Réponses: 3
    Dernier message: 14/04/2009, 18h56
  3. Transfert FTP net::ftp
    Par devjcc dans le forum Modules
    Réponses: 5
    Dernier message: 12/05/2006, 12h43
  4. [FTP] Transfert ftp Terminé
    Par yanis97 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 21/02/2006, 16h18
  5. [] [Réseau] Transfert fichier sur un FTP
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/02/2003, 17h33

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