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 :

Ecrire sur un serveur tiers


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut Ecrire sur un serveur tiers
    Bonjour,

    Mon application écrit des infos sur un serveur tiers. Mon application génère une chaine (=contenu du fichier), et l'écrit sur un serveur, avec fopen (ce serveur lit ensuite à intervalles réguliers les fichiers que je lui écris, les traite, puis les supprime)
    Mon problème est que cette écriture ne fonctionne PARFOIS PAS: dans ce cas le serveur tiers me dit que je lui ai envoyé un fichier vide.
    Je n'arrive pas à comprendre pourquoi.

    Voici ce que fait le script qui écrit:

    1- il constitue la chaine $output (selon le format demandé par l'application)
    2- il créé $nom_fichier_resultat: ce nom de fichier est toujours différent
    3- il ouvre le fichier:
    $file = fopen ("ftp://mpasse:utilisateur@ftp.serveurtiers.com".$nom_fichier_resultat, "wb");
    4- il écrit la chaine dans le fichier:
    fputs ($file, $output);
    5- il ferme le fichier:
    fclose ($file);

    NB. le lancement de ce script se fait (pour l'instant) manuellement.

    Avez-vous des pistes de réflexion ?

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je serai toi je commencerai par faire un log local qui duplique $output, juste histoire de ...

    moi j'aurai utilisé des fonctions plus spécifiques
    http://us2.php.net/manual/fr/function.tmpfile.php
    http://us2.php.net/manual/fr/function.ftp-fput.php

    et le gros avantage c'est de faire un http://us2.php.net/manual/fr/function.ftp-size.php à la fin du put pour loger la taille du fichier.

    edit: "wb" donc serveurs windows???

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Oui: mon serveur Apache écrit sur un serveur Windows.
    Je vais décortiquer tes idées et je reviens... merci !

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Bon, j'ai suivi tes conseils, et voilà comment je fait maintenant (j'utilise ftp_put plutôt que ftp_fput)
    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
    $temp = fopen($nom_fichier_resultat, 'wb'); // on ouvre un fichier sur le serveur apache
    fwrite($temp, $output); // on écrit notre contenu dans ce fichier
    $ftp_server = 'serveur.windows.tld'; // on se connecte au serveur windows
    $conn_id = ftp_connect($ftp_server);
    // Identification
    $ftp_user_name = 'utilisateur';
    $ftp_user_pass = 'mpasse';
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    // Tente de charger le fichier $file
    if (ftp_put($conn_id, $nom_fichier_resultat, $nom_fichier_resultat, FTP_BINARY)) {
    // message OK
    } else {
    // message pas OK
    }
    // Fermeture de la connexion et du pointeur de fichier
    ftp_close($conn_id);
    fclose($temp);
    // destruction du fichier temporaire
    unlink($nom_fichier_resultat);
    Cela semble fonctionner.
    Crois-tu que je devrais comparer la taille du fichier temporaire et celle du fichier envoyé: si c'est la même taille, alors l'écriture s'est bien déroulée ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Puisque tu utilise un fichier temporaire, pourquoi ne pas créer un fichier temporaire (premier lien donné par gene69)

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Parce que pour le moment, je le supprime avec unlink, mais je me réserve la possibilité d'archiver peut-être ces fichiers plus tard

Discussions similaires

  1. BackUp sur un serveur tiers.
    Par Hyt3k dans le forum Administration système
    Réponses: 1
    Dernier message: 01/04/2015, 15h53
  2. [PHP 5.0] [CSV] Ecrire dans un fichier CSV sur un serveur
    Par math_thefire dans le forum Langage
    Réponses: 13
    Dernier message: 17/04/2009, 17h44
  3. Ecrire dans un fichier sur un serveur JBoss
    Par ran_hery dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 10/04/2007, 18h53
  4. Réponses: 2
    Dernier message: 31/07/2006, 17h26
  5. [JSF]Ecrire le fichier sur le serveur après l'upload
    Par adrien.nicolet dans le forum JSF
    Réponses: 2
    Dernier message: 06/06/2006, 18h35

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