Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 14h49   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 28
Points : 0
Points : 0
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 ?
xdeslandes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 14h56   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
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 : 951
Points : 1 063
Points : 1 063
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???
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h50   #3
Invité de passage
 
Inscription : octobre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 28
Points : 0
Points : 0
Oui: mon serveur Apache écrit sur un serveur Windows.
Je vais décortiquer tes idées et je reviens... merci !
xdeslandes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h40   #4
Invité de passage
 
Inscription : octobre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 28
Points : 0
Points : 0
Bon, j'ai suivi tes conseils, et voilà comment je fait maintenant (j'utilise ftp_put plutôt que ftp_fput)
Code :
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 ?
xdeslandes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h53   #5
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Puisque tu utilise un fichier temporaire, pourquoi ne pas créer un fichier temporaire (premier lien donné par gene69)
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 18h03   #6
Invité de passage
 
Inscription : octobre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 28
Points : 0
Points : 0
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
xdeslandes est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h55.


 
 
 
 
Partenaires

Hébergement Web