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 curl avec gros fichier


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut ftp curl avec gros fichier
    Bonjour, je fais actuellement une recherche sur l'utilisation de curl avec de très gros fichier.
    J'ai un client qui souhaite lancer le téléchargement d'un fichier sur son serveur et le stocker dans un dossier.Cependant je me demande si curl serai capable via FTP de réaliser cela avec des fichiers assez conséquent.

    Seulement je ne sais pas si la directive du php.ini entre en ligne de compte via FTP de curl ?
    Je suppose que la méthode sera plus ou moins dans ce gout ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $fp = fopen('http://www.montest.com/test.xml', 'r');
     	curl_setopt($ch, CURLOPT_URL, 'ftp://ftp_login:password@ftp.domain.com/filename.xml');
     	curl_setopt($ch, CURLOPT_UPLOAD, 1);
     	curl_setopt($ch, CURLOPT_INFILE, $fp);
     	curl_setopt($ch, CURLOPT_INFILESIZE, filesize('http://www.montest.com/test.xml'));
     	curl_exec ($ch);
    Merci
    Aurélien

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je ne parviens pas à percevoir l'utilité de cURL ?

    Apparemment l'idée serait de récupérer un fichier sur son serveur et le déposer sur un autre serveur via FTP.
    Pourquoi alors ne pas utiliser directement les fonctions ftp_* ?

    Théoriquement il suffirait de récupérer le fichier en binaire (genre readfile), et utiliser une fonction comme ftp_fput() (en binaire) pour le déposer, non ?

    Tu as le nom du serveur FTP, les login/passe, où est le problème ?

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Seulement je ne sais pas si la directive du php.ini entre en ligne de compte via FTP de curl ?
    Quelles directives en particulier ? Si tu pense au temps d'execution c'est fortement probable.
    Sinon pourquoi passer par curl et pas par le flux ftp:// voir l'extension ftp ?

  4. #4
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bonjour,
    En faites je dois télécharger un fichier venant d'un serveur distant pour le rapatrier sur le serveur courant.
    En gros je dois télécharger un fichier XML très conséquent et ensuite le manipuler une fois terminé(mais c'est une autre histoire).
    Le processus de téléchargement peut se faire durant la nuit, une seul fois par jour.je me demande si je peux lancer une tâche cron pour faire sa (j'ai jamais utilisé cron -_-).
    D'ou ma question avec Curl ou voir la fonction ftp de PHP

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Je ferais juste un cron ou une tache planifiée selon le système avec quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //FTP ou l'on veux déposer le fichier
    $dest = 'ftp://login:pass@domain.fr/dossier/monfichier.xml';
    //Fichier sourceà télécharger , ici sur un serveur web
    $source = 'http://domain.com/dossier/atelecharger.xml';
    file_put_contents($dest,fopen($source));

  6. #6
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    le système, c'est un linux centeos (en principe)
    //FTP ou l'on veux déposer le fichier
    $dest = 'ftp://login:pass@domain.fr/dossier/monfichier.xml';
    //Fichier sourceà télécharger , ici sur un serveur web
    $source = 'http://domain.com/dossier/atelecharger.xml';
    file_put_contents($dest,file_get_contents($source));
    Je pensais pas que ce serai aussi simple, je m'attendais à lancer une ligne de commande via php ou bash ou encore une fonction ftp de php lancer via le bash pour la tâche planifié (cpanel).
    Je vais peut être vous donner la taille minimal du fichier 60MO jusqu'a 120 MO je suppose que c'est important de le savoir

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Tu peux rencontrer des problème si PHP ne peux pas allouer au moins la taille du fichier en mémoire. Donc le memory limit de ton php devrait être au moins à 120mo.

    Pour éviter les problème de mémoire utiliser ceci plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file_put_contents($dest,fopen($source));
    De cette manière l'écriture se fait depuis le stream du fichier source. C'est donc en flux tendu et ne bouffe pas toute la mémoire de PHP.
    Je viens de faire un test avec un fichier de 310Mo = 650ko de memoire au max.

    Éventuellement bien penser à augmenter voir supprimer le temps d’exécution max pour pas avoir de surprise.

  8. #8
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bonjour je reviens sur le sujet ayant reçu plus d'informations.
    J'ai appris que je dois télécharger via ftp dans un dossier donc par d'url fournie pour le flux mais des données FTP.
    Je suppose alors que la donne change, dois je utilisé ftp_connect ?
    Ou existe-t-il un autre moyen dans php 5.3

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    J'avais ouvert un topic avec les mêmes questions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy('tonfichier', 'ftp://user:password@tonserverftp/ledossier);
    http://www.developpez.net/forums/d12...er-volumineux/

    qui peu aussi donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy('ftp://user:password@tonserverftp/tonfichier', 'ftp://user:password@tonserverftp/ledossier/tonfichier');

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Bonjour je reviens sur le sujet ayant reçu plus d'informations.
    J'ai appris que je dois télécharger via ftp dans un dossier donc par d'url fournie pour le flux mais des données FTP.
    Je suppose alors que la donne change, dois je utilisé ftp_connect ?
    Ou existe-t-il un autre moyen dans php 5.3
    Sans trop m'avancer , il me semble que ça ne change rien au problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //FTP ou l'on veux déposer le fichier
    $dest = 'ftp://login:pass@domain.fr/dossier/monfichier.xml';
    //Fichier sourceà télécharger , ici sur un serveur web
    $source = 'ftp://login2:pass2@domain2.fr/dossier/atelecharger.xml';
    file_put_contents($dest,fopen($source));
    Suffit de changer la source et ou la destination pour que ça colle à tes besoins.

  11. #11
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bonjour j'ai tester avec ftp_connect et cela fonctionne très bien.
    Exemple :
    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
     
    $folder_path = "YOUR FOLDER PATH";
            $local_file = "test.xml";
            $server_file = "test.xml";
     
            //-- Connection Settings
            $ftp_server = "mondomaine.com"; // Address of FTP server.
            $ftp_user_name = "********"; // Username
            $ftp_user_pass = "***********"; // Password
            #$destination_file = "FILEPATH";
     
            // set up basic connection
            $conn_id = ftp_connect($ftp_server,21);
     
            // login with username and password
            $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
            // Récupération du délai de connexion du flux FTP courant
            $timeout = ftp_get_option($conn_id, FTP_TIMEOUT_SEC);
            // try to download $server_file and save to $local_file
            if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
                echo "Successfully written to $local_file\n";
            } else {
                echo "There was a problem\n";
            }
     
            // close the connection
            ftp_close($conn_id);
    il télécharge bien le fichier sur le serveur manque plus qu'a lier sa avec une tâche cron

  12. #12
    Expert éminent sénior

    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
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Bonjour j'ai tester avec ftp_connect et cela fonctionne très bien.
    Exemple :
    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
     
    $folder_path = "YOUR FOLDER PATH";
            $local_file = "test.xml";
            $server_file = "test.xml";
     
            //-- Connection Settings
            $ftp_server = "mondomaine.com"; // Address of FTP server.
            $ftp_user_name = "********"; // Username
            $ftp_user_pass = "***********"; // Password
            #$destination_file = "FILEPATH";
     
            // set up basic connection
            $conn_id = ftp_connect($ftp_server,21);
     
            // login with username and password
            $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
            // Récupération du délai de connexion du flux FTP courant
            $timeout = ftp_get_option($conn_id, FTP_TIMEOUT_SEC);
            // try to download $server_file and save to $local_file
            if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
                echo "Successfully written to $local_file\n";
            } else {
                echo "There was a problem\n";
            }
     
            // close the connection
            ftp_close($conn_id);
    il télécharge bien le fichier sur le serveur manque plus qu'a lier sa avec une tâche cron

    ton code reviens à faire un copy

  13. #13
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Effectivement mais je garde votre idée pour mon système de rapatriement des images étant plus léger mais souvent lancer en arrière plan.
    Oui pendant le traitement du XML je dois rapatrier des images venant d'un serveur distant héberger complètement ailleurs, massivement et relativement toutes x secondes pendant tout le traitement -_-

  14. #14
    Expert éminent sénior

    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
    Points : 10 727
    Points
    10 727
    Par défaut
    avec le copy tu peux faire un notification callback pour suivre le chargement

Discussions similaires

  1. FTP: probleme upload Gros fichier
    Par W-coyo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/08/2011, 13h09
  2. IndyDownloads problème avec gros fichier
    Par yvonic2010 dans le forum Composants VCL
    Réponses: 13
    Dernier message: 06/07/2011, 08h17
  3. [Apache commons FTP]Problème avec les fichier VSD
    Par Sniper37 dans le forum Général Java
    Réponses: 0
    Dernier message: 29/04/2010, 10h39
  4. net::ftp : pb recuperation gros fichier
    Par lelian dans le forum Modules
    Réponses: 1
    Dernier message: 04/09/2008, 23h55
  5. OutOfMemoryError avec gros fichier
    Par zizou771 dans le forum Langage
    Réponses: 48
    Dernier message: 04/10/2006, 16h32

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