Page 1 sur 1

[R] FTP : Erreur 0 dans le transfère d'un fichier

Posté : dim. 16 janv. 2011 17:30
par mystere
Bonjour j'ai suivi ce poste pour faire le transfert d'un fichier sur mon serveur :
http://www.autoitscript.fr/forum/viewto ... &hilit=ftp

J'ai également pris l'udf FTP sur ce poste.

Mais, j'ai le même problème que "wara", j'ai l'erreur 0, au lieu de l'erreur 1 ou 2.

Il semblerai que cette erreur vienne de mon serveur en lui même et non du code Autoit. Mais je ne comprend pas comment dépanner cette erreur.

Voici mon code Autoit.

Code : Tout sélectionner

#include<file.au3>
#include<FTP.au3>
dllopen("wininet.dll")
$ouvrir=_ftpopen("ftp")
$connexion=_ftpconnect($ouvrir,"mon serveur ftp","mon-id","mon-passe")
$ftp=_ftpputfile($connexion,"index2.php","index2.php") 
$ftp2=_ftpclose($ouvrir)
msgbox(0,"Error",$ftp) ; 1 = OK , 2 = Error
Comment dépaner cette erreur ?

Merci de me répondre.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : dim. 16 janv. 2011 19:17
par jchd
Simple curiosité : pourquoi ne pas employer l'UDF standard (FTPex.au3) ?

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : dim. 16 janv. 2011 19:56
par mystere
Merci de ta réponse Jched, pour te répondre bun je ne savais pas la quel étai officiel mai même avec cette udf sa ne fonctionne pas. J’ai essayé ceci du coté FTPex.au3.

Code : Tout sélectionner

#Include <FTPex.au3>
#include <file.au3>

$ftp=_ftp_open("ftp")
$session=_ftp_connect($serveur ftp","identifiant","mot de passe")
_ftp_fileput($session,"index2.php","index2.php")
_ftp_close($ftp)
Je me connecte bien à mon serveur ftp, le fichier s’envoie seul problème. Le fichier fait 0 ko a l’arrivé alors que sur mon disque il fait 250 ko.
Il semble que le problème vienne du faite qu’il ne trouve pas index2.php qui est situé dans le même répertoire que le scripte. J’ai essayé de mètre le chemin complet du genre c:\…
Mais le résultat est le même.

Comment résoudre ce problème ?

Merci de me répondre.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : dim. 16 janv. 2011 22:39
par jchd
Il faut absolument prendre l'habiude de tester les codes d'erreur suite à l'appel de toute fonction utilisant une entrée/sortie.

Autant il est lourd de tester (quand le langage le permet) le bon déroulement d'une addition ($i += 1 _peut_ provoquer un dépassement !), autant il est impératif de le faire dès lors qu'on jongle avec des fichiers, des droits d'accès, des protocoles complexes, etc.

Ne pas le faire c'est travailler à l'aveugle en priant très fort pour que tout fonctionne. Malheureusement et particulièrement lorsqu'un réseau (LAN ou WAN) et mis à contribution, il est "rare" que tout fonctionne ! Je veux dire par là que des sources d'erreur de toute nature guettent dans l'ombre et sautent un beau jour de leur cachette pour mordre sévèrement le cul du programmeur négligent.

Dans ton cas (un FTP PUT "tout simple") il faut réunir énormément de conditions pour qu'il réussisse : réseau local OK, routage OK, pare-feu OK, proxy OK si besoin, serveur OK, port OK, login OK, mot de passe OK, droits (1/2) OK, répertoire OK, fichier OK, mode (actif/passif + texte/binaire) OK, place libre OK droits (2/2) OK, ... J'arrête là la liste non exhaustive.

Qu'un seul paramètre ne convienne pas, qu'un seul élément se trouve défaillant, saturé ou autrement indisponible et c'est l'ensemble qui se casse la binette. Il est donc nécessaire, pénible certes mais absolument nécessaire, de tester systématiquement les retours d'erreur sur ce type d'appels. Je parie un caramel mou que tu découvriras bientôt la cause de l'échec en appliquant ce principe général.

Tiens-nous au courant.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : lun. 17 janv. 2011 11:05
par mystere
Merci de ta réponse jchd, mais comment je fais pour tester la fonction ?
Je suppose que je dois utiliser return, mais return quoi j’ai testé des trucs mais j’obtiens diverse message d’erreur. Voici un des quel j’ai essayé, mais j’obtiens une erreur a la ligne 8

invalid keyword at the start of this line
► Afficher le texte
Merci de me répondre.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : lun. 17 janv. 2011 12:06
par Ahbadiane
Bonjour,

Pour tester les fonctions _FTP_xxx le mieux est de vérifier @ERROR = 0 quand tout est OK.
Regarde l'aide de chaque fonction.
Si cela peut t'aider, j'ai fait un programme d'exemple en AutoIt autour de FTP : Utilitaire de tests FTP

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : lun. 17 janv. 2011 18:03
par mystere
Merci de ta réponse Ahbadiane, j’ai testé ce que tu m’as dit, j’obtiens ceci :
► Afficher le texte
J’arrive bien a me connecté au serveur ftp, mais le fichier lui ne s’envoie pas, je ne comprends pas pourquoi ?

Merci de me répondre.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : lun. 17 janv. 2011 23:05
par jchd
Droits sur le répertoire d'écriture, mode texte ou binaire, mode passif ou actif, port à utiliser, etc. Les sources d'erreur sont multiples.

_FTP_SetStatusCallback permet d'y voir un peu plus clair sur la situation.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : lun. 17 janv. 2011 23:07
par quelqun
jchd a écrit :Droits sur le répertoire d'écriture
je pense que c'est de la que viens le probléme :wink:

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : mar. 18 janv. 2011 10:53
par mystere
Merci de vos réponses. Pour répondre à quelqu'un, je viens de mètre tout mon FTP en 777, mais j’obtiens le même résultat. Pour répondre à jchd, j’ai essayé la fonction _FTP_SetStatusCallback à l’aide de l’exemple dans l’aide Autoit. J’obtiens ceci en réponse.
► Afficher le texte
Merci de me répondre.

Re: [..] FTP : Erreur 0 dans le transfère d'un fichier

Posté : mar. 18 janv. 2011 18:21
par mystere
Je me répond encore a moi même 8). J'ai trouvé la solution, je me suis renseigné sur la différence entre le mode passif et le mode actif, j'ai lut que les logicielles ftp était par défaut en mode actif or la commande _ftp_connect est par défaut en mode passif. J'ai donc permutée et hop sa a fonctionné.

Le problème est résolut. :)