Erreur PHP/FTP - Warning: ftp_fget()

Erreur PHP/FTP - Warning: ftp_fget() - PHP - Programmation

Marsh Posté le 07-03-2007 à 18:03:54    

Bonjour à tous !
 
 :hello:  
 
Je suis sur le point de finaliser un petit script mais une erreur persiste...

Citation :

Warning: ftp_fget() expects parameter 2 to be resource, string given in c:\program files\easyphp1-8\www\telecharger.php on line 27


 
Voici mon script:

Citation :

1   <?
2    
3   $ftp_server="localhost";
4   $ftp_user_name=$_POST['userftp'] ;
5   $ftp_user_pass=$_POST['pwdftp'] ;
6   $source_dir='\\dir_ftp\\' ;
7   $source_file=$_POST['ftpsource'] ;
8  
9   $destination_file='k:\\test\\' ;
10
11  // Création de la connexion
12  
13  $conn_id = ftp_connect("$ftp_server" );
14
15  // Authentification avec nom de compte et mot de passe
16  $login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass" );
17
18  // Vérification de la connexion
19  if ((!$conn_id) || (!$login_result)) {
20        echo "Tentative de connexion au serveur $ftp_server avec $ftp_user_name a échoué !";
21        die;
22    } else {
23       echo "$ftp_user_name, tu es connecté au serveur $ftp_server";
24    }
25
26  // Téléchargement d\'un fichier.
27  ftp_fget($conn_id, "$destination_file", "$source_file", FTP_BINARY) ;
28
29  // Fermeture de la connexion FTP.
30  ftp_quit($conn_id);
31
32  ?>


 
Le script m'indique que la connexion se déroule bien, mais que ça bloque au niveau du transfert.
Si qqun a une petite idée pour m'aider, il sera bien évidement le bienvenu :) Merci !


Message édité par lespagnol9393 le 07-03-2007 à 18:07:47

---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:03:54   

Reply

Marsh Posté le 07-03-2007 à 18:09:45    

L'idée est de lire le manuel : http://fr3.php.net/ftp_fget ... Le deuxième paramètre de ftp_fget est un handle sur un fichier (obtenu après un fopen).
 
Aussi, évite les "$destination_file", pourquoi mettre les "" autour de la variable ?

Reply

Marsh Posté le 07-03-2007 à 18:12:50    

Heuuu... Je vais tester tout ça...
Pour les "", c'était un exemple du web... Je vais modifier et tester de suite.
 
Merci de ton aide ;)


---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:20:02    

Citation :

<?
$ftp_server="localhost";
$ftp_user_name=$_POST['userftp'] ;
$ftp_user_pass=$_POST['pwdftp'] ;
$source_dir='\\Mon.Repertoire\\' ;
$source_file=$_POST['ftpsource'] ;
$source=$source_dir.$source_file ;
$destination_file='k:\\test\\' ;
$destination = fopen('$destination_file', 'w');
 
// Création de la connexion
$conn_id = ftp_connect("$ftp_server" );
 
// Authentification avec nom de compte et mot de passe
$login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass" );
 
// Vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
        echo "Tentative de connexion au serveur $ftp_server avec $ftp_user_name a échoué !";
        die;
    } else {
        echo "$ftp_user_name, tu es connecté au serveur $ftp_server";
    }
 
// Téléchargement d\'un fichier.
//Ligne 31:
ftp_fget($conn_id, $destination, $source, FTP_BINARY) ;
 
// Fermeture de la connexion FTP.
ftp_quit($conn_id);
 
?>


 

Citation :

Warning: ftp_fget(): Cannot RETR. Cannot open file "F:\Mon.Repertoire\dir_ou_se_trouve_les_fichier_que_je_veux_telecharger". Accès refusé in c:\program files\easyphp1-8\www\telecharger.php on line 31


 
:/


Message édité par lespagnol9393 le 07-03-2007 à 18:22:56

---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:24:08    

$destination_file doit être un fichier, et pas un dossier

Reply

Marsh Posté le 07-03-2007 à 18:24:54    

Erf...
C'est un repertoire composé de plusieurs *.rar que je voudrai télécharger...
Aurais-tu une idée dans ce cas ?


Message édité par lespagnol9393 le 07-03-2007 à 18:25:12

---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:27:04    

Je vois pas la différence, quand tu télécharges un fichier à partir d'un FTP, il faut bien lui donner le fichier destination...

Reply

Marsh Posté le 07-03-2007 à 18:28:07    

ça dépends... Il est tout à fait possible, manuellement, de lancer une repertoire en download, je me trompe ?


---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:31:38    

http://www.asp-php.net/ressources/ [...] aspx?id=84
 
Mais je dois dire que me connaissance sont encore assez limitées :D
Cela est donc faisable, Florent, non ?


---------------
Mon FeedBack
Reply

Marsh Posté le 07-03-2007 à 18:40:57    

Non c'est pas faisable directement, parce que le protocole FTP ne permet que de télécharger un fichier, pas un dossier entier. Il faut d'abord récupérer la listes des fichiers, puis lancer le download un à un :(

Reply

Marsh Posté le 07-03-2007 à 18:40:57   

Reply

Marsh Posté le 08-03-2007 à 08:47:50    

Hello :)
 
Je met de coté pour le moment le fait de vouloir télécharger tout un dossier distant, le temps de faire qques test.
Je liste donc le contenu d'un dossier, dans un fichier.
 
Je tente de télécharger ce fichier, une fois rempli avec la liste des fichiers de mon dossier, et là, erreur !

Citation :

Warning: ftp_fget(): Cannot RETR. Access violation at address 00492E54 in module 'ftpserv.exe'. Read of address 00000000 in c:\program files\easyphp1-8\www\mon_site\telecharger.php on line 49


 
Voici mon script:

Citation :

01  <?
02
03  $ftp_server="localhost";
04  $ftp_user_name=$_POST['userftp'] ;
05  $ftp_user_pass=$_POST['pwdftp'] ;
06  $source_dir='F:\\Mon_Repertoire\\' ;
07  $source_file=$_POST['ftpsource'].'\\' ;
08  $source=$source_dir.$source_file ;
09  $destination_file='c:\\test\\' ;
10  //echo $source ;
11 $destination = fopen('$destination_file', 'w');
12
13  // Création de la connexion
14  $conn_id = ftp_connect("$ftp_server" );
15
16  // Authentification avec nom de compte et mot de passe
17  $login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass" );
18
19 // Vérification de la connexion
20  if ((!$conn_id) || (!$login_result))
21   {
22       echo '<br><br><br><br><center><img src="attention.gif"></center><br>';
23       echo '<b><font color="red"><center>Tentative de connexion au serveur<u> '. $ftp_server .'</u> avec <u></u> a échoué !<br>(Nom d\'utilisateur <u>'. $ftp_user_name .'</u> incorrect)</center></b><BR><BR>';
24     echo '<!-- DEBUT DU SCRIPT BOUTON ET URL -->' ;
25     echo '<center><FORM>' ;
26     echo '<INPUT TYPE="button" VALUE=" Retour " onClick="document.location.href=\'premierepage.html\'">' ;
27     echo '</FORM></center>' ;
28     echo '<!-- FIN DU SCRIPT BOUTON ET URL -->';
29     die ;
30  } else
31     {
32      echo '<center><font color="red"><u>'. $ftp_user_name .'</u>, tu es connecté au serveur <u>'. $ftp_server .'</u></font></center>';
33  }
34
35       //On liste tous les fichiers présents dans /$source/
36       $file_image = "$source\\liste_rar.txt" ;
37       $fichier = fopen($file_image,"w+" ) ;
38       if ($handle = opendir($source))
39     {
40           while (false !== ($file_image = readdir($handle)))
41             {
42                       fwrite( $fichier,$file_image."<br>" );
43                       echo $fichier,$file_image."<br>" ;
44              }
45      }
46       fclose($fichier);
47
48  // Téléchargement d\'un fichier.
49  ftp_fget($conn_id, $destination, $file_image, FTP_BINARY) ;
50
51  // Fermeture de la connexion FTP.
52  ftp_quit($conn_id);
53
54  ?>


 
Merci pour votre aide, toujours précieuse :)


Message édité par lespagnol9393 le 08-03-2007 à 08:54:40

---------------
Mon FeedBack
Reply

Marsh Posté le 08-03-2007 à 09:28:34    

T'as toujours la même erreur :( Il faut spécifier un fichier de destination, et pas un dossier. Tu fais un fopen d'un dossier, ce qui évidemment va tout faire exploser.
 
Pour chaque fichier à télécharger du ftp, il faut créer manuellement un fichier sur ton disque, et faire un fopen dessus. Utilise la fonction touch() pour créer le fichier, fait un fopen dessus, fait ton fgets, télécharge, fais un fclose. Répète l'opération pour chaque fichier du dossier ftp

Reply

Marsh Posté le 08-03-2007 à 09:32:57    

Mais si je ne connais pas à l'avance le nom des fichiers ? :/
 
PS: Si tu regardes bien, ce n'est pas tout à fait la meme erreur que la précédente...

Message cité 1 fois
Message édité par lespagnol9393 le 08-03-2007 à 09:33:40

---------------
Mon FeedBack
Reply

Marsh Posté le 08-03-2007 à 13:12:56    

Je vais finalement laisser tomber l'idée de télécharger par ftp un dossier, et par la même occasion un fichier... Trop compliqué... :/


---------------
Mon FeedBack
Reply

Marsh Posté le 08-03-2007 à 15:40:56    

lespagnol9393 a écrit :

Mais si je ne connais pas à l'avance le nom des fichiers ? :/


ARGHHHHHH :D

 


Je vais devenir fou. La liste des fichier, tu peux la récupérer !

 

Avec :

Code :
  1. $listeFichier = ftp_nlist($conn_id, '-a .');


Tu peux changer de dossier aussi avec ftp_chdir()

 

Ensuite pour chaque élément de listefichier, tu fais un touch puis un fopen, et tu lance le download avec fgets. Y'a vraiment rien de compliqué :( N'hésite pas à lire complètement la documentation de l'extension ftp pour voir les possibilités.... Et si tu regardes un peu les commentaires dans le manuel, tu verra même ton problème tout fait ;)


Message édité par FlorentG le 08-03-2007 à 15:41:11
Reply

Marsh Posté le 10-03-2007 à 00:42:06    

T'es un amour Florent... Je vais regarder tout ça avec attention ;)
Merci beaucoup


---------------
Mon FeedBack
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed