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 upload : problème de chemin [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut FTP upload : problème de chemin
    Bonjour !!

    Je souhaite uploader un fichier local vers un serveur FTP, c'est la première fois que je fais ça. Pour l'instant je suis en phase de développement et le serveur FTP se trouve sur mon propre ordinateur (localhost).

    Voilà, quelque chose me turlupine : je n'arrive à uploader mon fichier "fichier.txt" vers le dossier "dossier" si et seulement si je fournis le chemin d'accès absolu de mon fichier.txt à uploader, c'est-à-dire qu'il faut que j'écrive en dur dans mon script '/chemin/vers/fichier.txt'. Or, lorsque mon serveur sera distant, je ne pourrais pas et ne voudrais pas avoir à savoir le chemin absolu du fichier du poste client. J'ai d'ailleurs lu beaucoup de forums et docs précisant que pour des raisons de sécurité cela n'est ni souhaitable ni possible.

    Du coup, je ne comprends pas comment faire pour récupérer le fichier à uploader via FTP. Je ne trouve pas de questions similaires sur les forums, ce qui me fait penser que quelque chose d'évident m'échappe... Sauriez-vous m'aider ?

    Par avance je vous remercie


    J'utilise la fonction ftp_put() appelée par la méthode uploadFile(), définie par une classe ftp, comme ceci :

    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
    // Inclusion de la classe ftp
    include("ftp_class.php");
    define('FTP_HOST', 'localhost');
    define('FTP_USER', 'myname');
    define('FTP_PASS', 'mypwd');
     
    // Objet FTP
    $ftpObj = new FTPClient();
     
    // Connexion serveur FTP
    if ($ftpObj -> connect(FTP_HOST, FTP_USER, FTP_PASS)) {
       $dir = 'dossier';
       $fileFrom = "fichier.txt";				
       $fileTo = $dir . "/" . 'fichier.txt';
       // Appel à la fonction de la classe
       $ftpObj -> uploadFile($fileFrom, $fileTo);
    }
    Sachant que la fonction uploadFile() de ftp_class.php est définie ainsi :

    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
    public function uploadFile ($fileFrom, $fileTo) {
       // *** Set the transfer mode
       $asciiArray = array('txt', 'csv');
       $extension = end(explode('.', $fileFrom));
       if (in_array($extension, $asciiArray)) {
          $mode = FTP_ASCII;		
       } else {
           $mode = FTP_BINARY;
       }
     
       // *** Upload the file
       $upload = ftp_put($this->connectionId, $fileTo, $fileFrom, $mode);
     
       // *** Check upload status
       if (!$upload) {
          $this->logMessage('FTP upload has failed!');
          return false;
       } else {
          $this->logMessage('Uploaded "' . $fileFrom . '" as "' . $fileTo);
          return true;
       }
    }

  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
    Par défaut
    Je souhaite uploader un fichier local vers un serveur FTP
    Ce n'est pas possible : PHP n'a pas accés aux fichiers du client.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta rapide réponse,

    Alors dans quels cas utilise-t-on la fonction PHP ftp_put() , dont la définition est quand même : ''ftp_put — Charge un fichier sur un serveur FTP'' ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Ta réponse m'a aiguillée vers les bons mots clefs et je suis tombée sur un autre forum avec cette réponse détaillée :
    Dans ce cas tu peux oublier l'option FTP

    Grosso modo, quand tu fais un "put" via FTP, cela signifie que :
    - tu as un client FTP sur ta machine
    - tu es connecté à un serveur FTP
    - tu va envoyer un fichier depuis ton ordinateur vers le serveur auquel tu t'es connecté

    Lorsque PHP fait un "put" via FTP, cela signifie :
    - qu'il est un client FTP
    - qu'il est connecté à un serveur FTP
    - qu'il va envoyer un fichier depuis la machine où il est installé, vers le serveur auquel il s'est connecté

    Pour faire simple, en php, le FTP va te servir à faire des transfert de fichiers entre serveurs, mais pas entre un client et un serveur. Pour cela il te faut utiliser le protocole HTTP, en utilisant un formulaire html et des champs de type file. PHP pourra alors récupérer le fichier que tu envois depuis ton poste vers le serveur à l'aide de la fonction move_uploaded_file()
    Je comprends donc que ftp_put() ne fonctionne que pour le transfert de fichiers de serveur en serveur. La solution proposée par ce post est d'utiliser le protocole HTTP et la fonction PHP move_uploaded_file, pourtant dans de précédentes lectures de topics j'avais lu qu'il était préférable d'utiliser le protocole FTP. Dans mon cas, je n'ai donc pas le choix ? Ou bien puis-je utiliser le protocole FTP à l'aide d'un autre langage que PHP ? (A terme mon objectif est que l'utilisateur de mon interface web puisse uploader un fichier vers un serveur grâce à un formulaire)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Pour ceux que ça intéresse, j'ai réussi à exécuter un transfert de fichiers via le protocole FTP en php, grâce aux variables globales $_FILES qui récupèrent le nom et le nom du fichier temporaire après un envoi par formulaire avec l'enctype "multipart/form-data", et aux fonctions ftp_chdir() et fpt_put().

    Merci quand même et bonne journée !

  6. #6
    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
    Par défaut
    Tu n'a pas fais un transfert en FTP mais juste un déplacement sur le serveur.
    Ton transfert client->serveur est via en HTTP.

    Moi je trouve qu'utiliser un protocole réseau pour manipuler des fichiers locaux c'est un peu ... bizarre.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    J'ai du mal à saisir les nuances, tout ceci est nouveau pour moi.
    Tu veux dire que j'utilise le protocole HTTP (avec la récupération grâce aux variables $_FILES) puis le protocole FTP (avec la fonction ftp_put()) ?
    Moi je trouve qu'utiliser un protocole réseau pour manipuler des fichiers locaux c'est un peu ... bizarre.
    Pourquoi, quelle est la meilleure solution pour envoyer des fichiers locaux sur un serveur ?

  8. #8
    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
    Par défaut
    Pour envoyer les fichiers locaux sur le serveur, un formulaire comme tu le fais c'est parfait.
    Après, l'idée d'utiliser FTP plutôt que move_uploaded_file() pour déplacer le fichier je ne trouve pas ça utile.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    D'accord, merci pour cet avis, je commence à y voir un peu plus clair.
    Je précise que le transfert via FTP était imposé par mon supérieur (bien que la discussion restait ouverte), c'est pourquoi j'ai cherché absolument à réaliser cela.
    D'après ce que j'ai pu lire, dans mon cas, le transfert par move_uploaded_file est préconisé tant qu'il n'y a pas besoin d'utiliser la vitesse d'un transfert FTP, c'est à dire lorsqu'il n'est pas question de trop gros fichiers. En dehors de ce cas là en effet il n'est pas utile d'utiliser le protocole FTP.

  10. #10
    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
    Par défaut
    Du serveur vers lui même ça m'ettonerait qu'on aille plus vite en FTP qu'avec move_uploaded_file().

    Si le sujet était de transférer des fichiers du postes client vers le serveur en FTP, comme tu l'as dit plus haut, ce n'est possible que si le client possède un serveur FTP.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Je me basais sur le commentaire suivant http://stackoverflow.com/questions/1...der-2gbhttp:// , dont la conclusion est :
    A better solution should be to provide both options, according to the size of the file.
    (en parlant de la solution move_uploaded_fil et de la solution ftp).

    Dans mon cas c'est vrai que j'aurais surtout à faire à des petits fichiers, mais la solution du transfert par ftp_put convient à mon supérieur. D'ailleurs, l'idée de privilégier le transfert FTP plutot que move_uploaded_file est de pouvoir bénéficier de la connexion authentifiée du transfert FTP.
    Je vais marquer cette discussion à résolue car même si je n'en ai pas encore fini dans la globalité de ma mission actuelle en rapport avec les transferts de fichier, en ce qui concerne l'upload de fichier, cela semble bon pour moi. Merci d'avoir pris le temps de me lire et de me répondre !

  12. #12
    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
    Par défaut
    Vous faites toujours la même confusion :
    Le texte que vous citez compare l'envoi de fichier via une interface web ou via un logiciel FTP.
    Il n'est pas question de transfert de fichier via les fonctions FTP de PHP.

    Concernant la connexion authentifiée, elle est inutile : vous bougez un fichier d'un dossier du serveur vers un autre dossier du serveur, comme si vous étiez devant le clavier en faisant copier/coller.
    Votre transfert du fichier du poste client vers le serveur est faite totalement en clair.
    Utiliser FTP ou lieu de move_uploaded_file() peut se justifier si on veut placer les fichiers dans un dossier qui n'est pas accessible en écriture au serveur web.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Oui en effet c'est confus dans ma tête et ça fait 3 jours que j'essaie d'y voir plus clair mais j'ai du mal

    Du coup, j'en reviens à ma même question, je ne comprends pas à quoi sert et dans quels cas utilise-t-on la fonction PHP ftp_put() ? (Désolée si je me répète et si la réponse a déjà été donnée ) Pourquoi avoir créé une fonction php qui réalise un transfert FTP si, avec php, on ne peut pas faire de transfert client - serveur ? Si on ne peut faire que du serveur - serveur , alors on est dans le cas où move_uploaded_file convient aussi bien ? Donc quel intérêt pour ftp_put() ? (Est-ce que c'est uniquement pour réaliser des transferts de fichiers entre serveurs différents?)

    De plus
    Le texte que vous citez compare l'envoi de fichier via une interface web ou via un logiciel FTP.
    Il n'est pas question de transfert de fichier via les fonctions FTP de PHP.
    Pourtant la question posée parle de ftp_get() ?

    Une autre incompréhension de ma part (jamais 2 sans 3 ) :
    Concernant la connexion authentifiée, elle est inutile : vous bougez un fichier d'un dossier du serveur vers un autre dossier du serveur, comme si vous étiez devant le clavier en faisant copier/coller.
    Je pensais que mon ftp_put() déplaçait mon fichier du répertoire temporaire d'apache (où se trouve $_FILES['fichier']['tmp_name']) vers le serveur ftp... Ce ne sont pas nécessairement les mêmes serveurs si ?

    Merci par avance si vous avez le temps de m'éclaircir davantage.

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

Discussions similaires

  1. [Upload] Problème d'upload par ftp
    Par wishmastah dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 15h57
  2. [Upload] Problème d'upload :)
    Par manu_du_31 dans le forum Langage
    Réponses: 3
    Dernier message: 14/11/2004, 15h56
  3. [XSLT] Problème de chemin d'accès + XSLT
    Par Jorus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/09/2004, 08h36
  4. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  5. [JSP] Include, problème de chemin relatif
    Par dafly dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/04/2004, 14h11

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