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 :

transfert de fichier sécurisé : Sftp


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de sarah65536
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 59
    Points
    59
    Par défaut transfert de fichier sécurisé : Sftp
    Bonjour, dans le cadre de mon projet, je dois envoyer des fichiers vers un serveur ftp, en utilisant un connexion sécurisée Sftp.
    Je ne connais pas du tout ce type de transfert et après des recherches, j'ai compris qu'il fallait utiliser le protocole SSH2.

    Seulement, je ne comprends pas grand chose. J'ai eu beau regarder les docs ( presque toutes en anglais) je suis toujours larguée, et je n'arrive même pas à me connecter.

    Pourrais-je avoir des indications ? (Un lien vers un tuto, un bout de code quelque chose ? )

    Ma config :
    Apache : 1.3.39
    PHP : 4.4.9 ( j'ai vu qu'il fallait l'extension php_ssh2, mais avec apache 1.3.39 elle n'apparait pas. Comment puis-je faire ? En sachant que je ne peux pas changer ma version d'apache)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155

  3. #3
    Membre du Club Avatar de sarah65536
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Oui j'ai regardé la documentation.

    En gros je dois faire :

    - Connexion : ssh2_connect()
    - Authentification : ssh2_auth_password()
    - Vérification de la connexion : ssh2_fingerprint()
    - envoi des fichiers vers le serveur : ssh2_scp_send
    - verifier que l'upload est ok
    - fermer la connexion

    Est-ce comme ca que je dois procéder ?

    Si c'est ça, j'ai quand même plusieurs questions.

    D'abord pour la connexion, je comprends pas l'argument method. ( solution : je ne l'utilise pas )

    Ensuite, je ne sais pas comment installer l'extension avec ma version d'apache ( j'utilise wamp) Est ce que je dois trouver un truc genre php_ssh2... ou l'extension php_open_ssl suffit-elle ?

    en enfin, je ne sais pas comment vérifier que l'upload est ok, ni comment fermer la connexion.

  4. #4
    Membre du Club Avatar de sarah65536
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 59
    Points
    59
    Par défaut
    Je vais détailler un peu plus mon projet. J'ai besoin de cette connexion pour importer un fichier csv contenant une liste d'utilisateur d'un site vers un autre. Les deux site n'ont pas la même configuration.

    l'un possede apache 1.1.39 et PHP 4.4.9
    l'autre apache 2.2.11 et php 5.2.9-1


    Pour effectuer le transfert du fichier, je dois copier le fichier avec le premier systeme(vieilles versions) sur un serveur ftp via Sftp. et avec le second systeme(version recente) je dois regarder si le serveur ftp contient des fichiers, et si oui, les télécharger via Sftp.

    Pourquoi Sftp ? pour ne pas laisser trainer des ifnormations sur les personnes sur le net. Logique.

    Ne vous inquietez pas, il n'y a rien d'illegal. Les deux site appartiennent a la meme entreprise.

    j'avais commencé par envoyer vers le serveur ftp avec le premier systeme. Voila pourquoi je vous ai déja demandé de l'aide. Malheureusement je perds trop de temps, alors en attendant de comprendre le fonctionnement, je suis passé à l'import, avec le second systeme.

    La, j'ai pu ajouter mes extensions a php ( que je ne peut pas faire avec la vieille version) et maintenant c'est au niveau du code que ca bloque.
    Vila mon code actuel :
    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
     $ftp_server = $this->ftp_site;
             $ftp_user_name=$this->ftp_user;
             $ftp_user_pass=$this->ftp_mdp;
    
    
             // Création de la connexion
             $methods = array(
      'kex' => 'diffie-hellman-group1-sha1',
      'client_to_server' => array(
        'crypt' => '3des-cbc',
        'comp' => 'none'),
      'server_to_client' => array(
        'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',
        'comp' => 'none'));
    
             $callbacks = array('disconnect' => 'my_ssh_disconnect');
    
    
             $conn_id = ssh2_connect($ftp_server,21, $methods, $callbacks);
             echo $conn_id;
             
             // Authentification
             // verificaion de la connexion
             // Upload des fichiers
             // Vérification de téléchargement
             // Fermeture de la connexion FTP.
    Comme vous pouvez le constater je n'en suis qu'au début de ma programmation, et je galère déja... Ca promet...

    Lorsque j'execute ce code, une erreure est affichée :

    Warning: ssh2_connect() [function.ssh2-connect]: Failed setting DISCONNECT callback in C:\wamp\www\APAP83\_Import\apap.php on line 366

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 892350456 bytes) in C:\wamp\www\APAP83\_Import\apap.php on line 366
    (ligne 366 en rouge)

    Alors, j'avoue ne rien avoir compris du tout aux arguments callback et methods. Je penses que cela doit venir de la, mais je ne sais pas quoi mettre d'autre ( j'ai copié les valeurs actuelles à partir d'un exemple trouvé sur le net)

    Please... Help...
    Edit : Pour mes tests, j'utilisais un serveur ftp de chez free. Free ne prends pas en charge le Sftp. C'est pour cela que ca ne fonctionnait pas. J'ai changé de ftp, et la ça fonctionne. J'ai utilisé celui de mon hebergeur ( ovh).
    j'ai également résolu le problème des arguments methods et callback, en ne les utilisant pas. (Oui, je sais, c'est la méthode Barbare)

    Actuellement un nouveau problème s'offre à moi. Je n'arrive pas à accéder au répertoire principal de mon ftp. Dans ce repertoire, au même niveau que le dossier www, j'ai créé un dossier Import. C'est dans ce repertoire la que je n'arrives pas à entrer.

    Voila les lignes de codes qui devraient le permettre :
    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
             try
             {
                 // conexion au serveur ftp
                 $connexion = @ssh2_connect($ftp_server, $ftp_port);
                 if ($connexion == false)
                 {
                     throw new Exception("Erreur lors de la connexion au serveur ftp\r\n");
                 }
     
                 // Authentification
                 if (@ssh2_auth_password($connexion,$ftp_user_name, $ftp_user_pass)==false)
                 {
                     throw new Exception("Erreur lors de l'authentification au serveur ftp\r\n");
                 }
     
                 // verification de la connexion
                 if (@ssh2_fingerprint($connexion)!=$id_connexion)
                 {
                     throw new Exception("Erreur lors de la vérification de la connexion au serveur ftp\r\n");
                 }
     
                 // Acceder au repertoire Import
                $sftp = ssh2_sftp($connexion);
                $repertoire="ssh2.sftp://$sftp/Import/";
                echo $repertoire."<br>";
     
                 // explore le dossier
                 print_r(scandir($repertoire));
            }
            catch(Exception $e)
            {
                echo $e->getMessage();
            }
    Voila ce que me renvois mon navigateur :
    ssh2.sftp://Resource id #6/Import/

    Warning: scandir() [function.scandir]: Unable to open ssh2.sftp://Resource id #6/Import/ on remote host in Chemin vers mon script on line 404

    Warning: scandir(ssh2.sftp://Resource id #6/Import/) [function.scandir]: failed to open dir: operation failed in Chemin vers mon script on line 404

    Warning: scandir() [function.scandir]: (errno 11): Resource temporarily unavailable in Chemin vers mon script
    Comment puis-je accéder à ce répertoire ?

  5. #5
    Membre du Club Avatar de sarah65536
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 59
    Points
    59
    Par défaut je n'arrive pas a me positionner dans le repertoire du ftp
    J'ai créé à la racine du repertoire ftp un dossier Import( au même niveau que le dossier www), dans lequel je dois récupérer des fichiers.

    ces fichiers contenant des données importantes et confidentielles, j'utilise le protocole sftp.

    Seulement, je n'arrive pas a consulter les fichiers présents dans ce dossier.

    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
     
         try
             {
                 // conexion au serveur ftp
                 $connexion = @ssh2_connect($ftp_server, $ftp_port);
                 if ($connexion == false)
                 {
                     throw new Exception("Erreur lors de la connexion au serveur ftp<br>");
                 }
     
                 // Authentification
                 if (@ssh2_auth_password($connexion,$ftp_user_name, $ftp_user_pass)==false)
                 {
                     throw new Exception("Erreur lors de l'authentification au serveur ftp<br>");
                 }
     
                 // verification de la connexion
                 if (@ssh2_fingerprint($connexion)!=$id_connexion)
                 {
                     throw new Exception("Erreur lors de la vérification de la connexion au serveur ftp<br>");
                 }
     
    // acceder aux fichiers situés dans le repertoir Import. 
    $sftp = ssh2_sftp($connexion);
    $repertoire="ssh2.sftp://$sftp/Import/";
    echo $repertoire."<br>";
                 print_r(scandir($repertoire));
            }
            catch(Exception $e)
            {
                echo $e->getMessage();
            }
    Affichage du 'echo' :
    ssh2.sftp://Resource id #6/Import/
    et la il m'affiche comme erreur :
    ssh2.sftp://Resource id #6/Import/

    Warning: scandir() [function.scandir]: Unable to open ssh2.sftp://Resource id #6/Import/ on remote host in Chemin de mon script on line 388

    Warning: scandir(ssh2.sftp://Resource id #6/Import/) [function.scandir]: failed to open dir: operation failed in Chemin de mon script on line 388

    Warning: scandir() [function.scandir]: (errno 11): Resource temporarily unavailable in Chemin de mon script on line 388
    Comment puis-je accéder à ce répertoire ?

Discussions similaires

  1. Transfert de fichier en SFTP avec j2ssh
    Par rinuom dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 16/02/2010, 13h32
  2. Transfert de fichiers par SFTP
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 09/11/2009, 19h16
  3. Script de transfert de fichier en SFTP
    Par JeReMsS69 dans le forum Réseau
    Réponses: 1
    Dernier message: 15/09/2009, 19h43
  4. Transfert de fichiers par SFTP / Proxy Socks
    Par Nick56 dans le forum Unix
    Réponses: 0
    Dernier message: 08/03/2008, 16h15
  5. Transfert de fichier sécurisé a partir de windows
    Par funboard dans le forum Windows
    Réponses: 2
    Dernier message: 07/12/2007, 15h42

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