Extra !! 
 De Stéphane Wantiez - Mardi 10 Septembre 2002 à 19:43

Génial ! J'essaie depuis un moment de faire un tel script, sans succès. J'ai été très surpris de voir le fichier enfin transféré sur mon FTP ! Bravo pour le script !

  Page de téléchargement 
 De Stéphane Wantiez - Mercredi 11 Septembre 2002 à 17:07

Voici donc un script qui permet au webmaster d'un site d'utiliser la fonction ci-dessus pour télécharger des fichiers sur son serveur, sans devoir passer par son propre PC :

<?

function ftp_copy ( $host, $user, $pass, $path, $name, $url) {
// Fonction trouvée à l'adresse :
// http://www.phpinfo.net/?p=commentaires&rub=astuces&id=129
// Réalisée par Tom, modifiée par Lord W

echo "\n<br>\nLancement de la procédure de transfert..." ;

if ( ( empty ( $user ) ) || ( empty ( $pass ) ) ) die ("\n<br>\nErreur : Pas de log-in ou de mot de passe pour le serveur FTP de réception !\n\n</body>\n\n</html>") ;

$url = eregi_replace ( " " , "%20" , $url ) ;

echo "\n<br>\n Ouverture du fichier à télécharger..." ;
@ $fd = fopen ( $url , "rb" ) ;
if ( $fd ) { echo "\n<br>\n OK : Fichier à télécharger ouvert." ; }
else { die ("\n<br>\n Erreur : Impossible de lire le fichier à télécharger.\n\n</body>\n\n</html>") ; }

echo "\n<br>\n Ouverture du fichier temporaire d'écriture..." ;
@ $tmp = tmpfile () ;
if ( $tmp ) { echo "\n<br>\n OK : Fichier temporaire ouvert." ; }
else { die ("\n<br>\n Erreur : Impossible de créer un fichier temporaire !\n\n</body>\n\n</html>") ; }

echo "\n<br>\n Transfert des données du fichier à télécharger au fichier temporaire..." ;
$size = 0 ;
while ( ! feof ( $fd ) ) {
fwrite ( $tmp , fread ( $fd , 1 ) ) ;
$size++ ;

}
if ($size>1048576) {

$gsize = $size / 1048576 ;
$tsize = number_format ( $gsize , 2 , "," , "." ) ;
$taille = $tsize." [mo]" ;

}

elseif ($size>1024) {

$gsize = $size / 1024 ;
$tsize = number_format ( $gsize , 2 , "," , "." ) ;
$taille = $tsize." [ko]" ;

}

else {

$taille = $size." [octet".( $size>1 ? "s" : "" )."]" ;

}
echo "\n<br>\n OK : Transfert terminé." ;
echo "\n<br>\n Taille du fichier : ".$taille."." ;

fclose ( $fd ) ;
rewind ( $tmp ) ;

echo "\n<br>\n Connexion au serveur FTP de réception..." ;
@ $fp = ftp_connect ( $host ) or die ("\n<br>\n Erreur : Impossible de se connecter au serveur de réception !\n\n</body>\n\n</html>") ;
echo "\n<br>\n OK : Connexion réussie." ;

echo "\n<br>\n Identification au serveur FTP de réception..." ;
@ $log = ftp_login ( $fp , $user , $pass ) or die ("\n<br>\n Erreur : Impossible de s'identifier au serveur de réception !\n\n</body>\n\n</html>") ;
echo "\n<br>\n OK : Identification réussie." ;

if ( ! ( empty ( $path ) ) ) {

echo "\n<br>\n Changement de dossier sur le serveur de réception..." ;
ftp_chdir ( $fp , $path ) or die ("\n<br>\n Erreur : Impossible de changer de dossier sur le serveur de réception !\n\n</body>\n\n</html>") ;
echo "\n<br>\n OK : Changement opéré avec succès." ;

}

echo "\n<br>\n Transfért des données du fichier temporaire au serveur FTP de réception..." ;
@ ftp_fput ( $fp , $name , $tmp , FTP_BINARY ) or die ("\n<br>\n Erreur : Impossible de transférer les données du fichier temporaire au serveur FTP de réception !\n\n</body>\n\n</html>") ;
echo "\n<br>\n OK : Transfert opéré avec succès." ;

ftp_quit ( $fp ) ;
fclose ( $tmp ) ;

echo "\n<br>\nOK : Procédure de transfert terminée avec succès." ;

return true ;
}

?>

<html>

<head>

<title>Script de téléchargement PHP-FTP - Administration - FORTRESS WOLFENSTEIN</title>

</head>

<body>

<? if (empty($submit)) { ?>

<h2><b><u>Script de téléchargement PHP-FTP</u></b></h2>
<p>Veuillez entrer l'URL du fichier à télécharger vers le répertoire
temporaire '/ftp/' :</p>
<form method="POST" action="transfert.php">
<p><input type="text" name="url" size="50"></p>
<p><input type="submit" value="Transférer" name="submit"><input type="reset" value="Rétablir" name="B2"></p>
</form>

<? } else {

if (empty($url)) {

die ("\nErreur : Pas d'URL entrée !\n\n</body>\n\n</html>") ;

}

$adresse = parse_url ($url) ;
$ip = gethostbyname ($adresse["host"]) ;

if ((!(is_array($adresse)))||(!($ip))) {

die ("\nErreur : L'URL entrée n'est pas valide.\n\n</body>\n\n</html>") ;

}

echo "\nOK : URL valide - Détails de cette adresse :<br> <br>" ;
echo "\n<ul>" ;

echo "\n<li><u>URL complète :</u> ".$url."</li>" ;
echo "\n<li><u>Protocole utilisé :</u> ".$adresse["scheme"]."</li>" ;
if ($adresse["user"]) echo "\n<li><u>Log-In d'utilisateur :</u> ".$adresse["user"]."</li>" ;
if ($adresse["pass"]) echo "\n<li><u>Mot de passe d'utilisateur :</u> ".$adresse["pass"]."</li>" ;
echo "\n<li><u>Serveur hôte :</u> ".$adresse["host"]."</li>" ;
echo "\n<li><u>IP du serveur :</u> ".$ip."</li>" ;
if ($adresse["port"]) echo "\n<li><u>Port de connexion :</u> ".$adresse["port"]."</li>" ;
echo "\n<li><u>Référence absolue du fichier sur le serveur :</u> ".$adresse["path"]."</li>" ;
if ($adresse["query"]) echo "\n<li><u>Paramètres de requête :</u> ".$adresse["query"]."</li>" ;
if ($adresse["fragment"]) echo "\n<li><u>Signet :</u> ".$adresse["fragment"]."</li>" ;

echo "\n</ul>" ;
echo "\n<br> \n";

$chem1 = explode ("/",$adresse["path"]) ;
$nbr_chem1 = count ($chem1) ;
$nom_fichier = $chem1[$nbr_chem1-1] ;

$localfile = "- répertoire absolu de la destination du fichier -".$nom_fichier ;
$localfile_rel = "- répertoire relatif de la destination du fichier, par rapport à ce script -".$nom_fichier ;

echo "\n<br>Destination du fichier : ".$localfile." (en mode anonyme)." ;

echo "\n<br>Vérification de la présence du fichier à télécharger dans le répertoire temporaire..." ;

if (file_exists($localfile_rel)) die ("\n<br>Erreur : Le fichier à télécharger se trouve déjà dans le répertoire temporaire !\n<br>Veuillez le traiter avant de procéder au téléchargement.\n\n</body>\n\n</html>") ;

echo "\n<br>OK : Fichier non présent dans le répertoire temporaire." ;

ftp_copy("- serveur FTP de réception -","- log-in pour ce serveur -","- mot de passe pour ce serveur -","- répertoire(s) sur ce serveur -",$nom_fichier,$url) or die ("\n<br>Erreur : Impossible de transférer le fichier !\n\n</body>\n\n</html>") ;

} ?>

</body>

</html>

Cette page affiche tout d'abord un formulaire contenant un champ de texte dans lequel vous introduirez l'adresse du fichier à transférer, et ensuite affiche des messages d'état informant l'utilisateur de l'évolution du transfert.

  Transfert de fichiers en local 
 De Olivier Papon - Jeudi 19 Septembre 2002 à 15:24

ce script est très utile pour se connecter à un ftp, par contre , je ne comprends pas bien comment on peut se connecter d'un pc à l'autre en local avec ce script
ex : si je ve me connecter sur le pc 192.168.1.1 à partir du
192.168.1.2 je mets koi ds $host ?
merci !

  Re: Transfert de fichiers en local 
 De Stéphane Wantiez - Jeudi 19 Septembre 2002 à 19:23

Il faut tout d'abord que PHP/MySQL/Apache soient installés sur votre PC (via EasyPHP par exemple - http://www.easyphp.org - sous Windows). Ensuite, le host est le PC dans lequel vont arriver les fichiers, càd le vôtre : 192.168.1.2, avec les droits d'accès adéquats. Je pense également qu'il serait préférable de désactiver la ligne "$ip = gethostbyname ($adresse["host"]) ;", car vous travaillez directement avec des IP sur un réseau local, ça vous évitera ainsi d'aller consulter votre serveur DNS, si tant est que vous en ayez configuré un ! À noter qu'il ne faut pas toucher à la fonction ftp_copy, mais au code source joint, et notamment les variables $localfile....
Ce script est fait pour un seul site, mais il serait facile de l'adapter à d'autres en ajoutant un champ de formulaire vous demandant de spécifier les adresses absolues et relatives de votre serveur, ainsi que les paramètres d'accès (log-in et mdp).