Envoi contenu d'un dossier vers ftp

Soyez le premier à donner votre avis sur cette source.

Vue 19 971 fois - Téléchargée 621 fois

Description

Un code ma foi assez basique mais qui, je pense, pourra en aider certains.
J'ai pu remarqué en faisant mon code que de nombreuses sources étaient disponibles, mais que de nombreux débutants n'arrivaient pas à les exploiter. (je suis débutant)
La plupart des codes ftp disponibles concernent l'envoi d'un fichier.
Ici le but est de lister les fichiers d'un répertoire et d'envoyer directement sur le ftp.
Soyez indulgent quand à la syntaxe présente dans ce code.
Merci de me montrer et de m'expliquer mes erreurs. (Ce code marche tout de même !)
=> Le but est de créer un formulaire, interface web, listant le contenu d'un répertoire - tri préalable- (code non fourni, me contacter si besoin), pour au final, envoyer les fichiers contenus dans un répertoire donné vers un ftp.

Source / Exemple :


<?php

$ftp_server = 'ftp.votreftp.fr';
$ftp_user_name="username";
$ftp_user_pass="motdepasse";
$rep = "C:\\Program Files\\upload\\";
$dir = opendir($rep);

// 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 "La connexion FTP a échoué!";
	        echo "Tentative de connexion à $ftp_server avec $ftp_user_name";
	        die;
	    } else {
	        echo "Connecté à $ftp_server, avec $ftp_user_name";
	    }

		// Listage du contenu du répertoire + Upload des fichiers 

	while($f=readdir($dir)) { 
	   if(is_file($rep.$f)) { 
	   $source_file= $rep . $f;
	$destination_file="/www/votre/racine/web/".$f;
	$upload = ftp_put($conn_id, "$destination_file", "$source_file", FTP_BINARY);
		}
	}

	// Vérification de téléchargement
	if (!$upload) {
	        echo "Le téléchargement Ftp a échoué!";
	    } else {
	        echo "Téléchargement de $source_file sur $ftp_server en $destination_file";
	    }

// Fermeture de la connexion FTP.
ftp_quit($conn_id);

?>

Conclusion :


Merci de corriger mes erreurs si nécessaires.
Bonne utilisation

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
lundi 18 avril 2011
Statut
Membre
Dernière intervention
21 janvier 2013

Bonjour,

Je suis très intéressé par ce code mais je ne trouve pas mon bonheur!
Comme vous le savez il n'est pas possible de sélectionner plusieurs fichiers en PHP et donc de les d'uploader en FTP.

Je voudrais donc pouvoir uploader le contenu d'un répertoire exemple: http://monsite/temp sur un FTP, est ce possible ? auriez vous un bout de code ?

Merci
Messages postés
35
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
18 septembre 2009

Bonjour
J'ai apprécié ce code, qui m'a permis de compléter mes connaissances sur le sujet.
Je me suis permis de le modifier pour offrir à l'utilisateur le choix du serveur, du login, du mdp, du rép. d'origine (avec les limitations que vous verrez) et du rép de destination.
Le code ci-dessous fonctionne parfaitement sous IE7. Il bugge sous Firefox, parce que ce navigateur renvoie toujours le nom de base du fichier et non le chemin complet... Si quelqu'un a la solution !
Voici donc "ftpchoix.php":



<script>
window.resizeTo(screen.width,screen.height-26);
window.moveTo(0,-1);
</script>

<!-- DEBUT DES CHOSES SERIEUSES ! ! ! ! ! --->
<!-- ==================================== --->
<?php
function fetepe($serveur,$user,$mdp,$reporg,$repdest)
{
$x=0;
/* vérification des variables d'environnement
echo $serveur . ' ' . $user . ' ' . $mdp . ' ' . $reporg . ' ' . $repdest; */
$dir=opendir($reporg);
// création de la connection
$conid=ftp_connect("$serveur") or die("Impossible de se connecter à " . $serveur);
// authentification avec nom du compte et mdp
$login_result=ftp_login($conid,"$user","$mdp");
// vérification de la connexion
if ((!$conid) || (!$login_result))
{ die("La Connexion FTP a échoué !
"); }
else { echo "Connecté à $serveur, avec $user
"; }
// Listage du contenu du répertoire et upload
while($f=readdir($dir))
{ if (is_file($reporg . $f))
{ $x++;
$source_file=$reporg. $f;
$destination_file=$repdest.$f;
$resultat = ftp_put($conid,"$destination_file","$source_file",FTP_BINARY);
} /* else { echo $reporg . $f . '
';
echo $repdest . $f . '
'; } */
}
// Vérification du téléchargement
if(!$resultat)
{ echo "Le téléchargement a échoué
";
echo "Si vous avez eu le message 'No such directory or file', ou 'not a valid Directory resource', 2 possibilités :
";
echo "1) Soit vous vous êtes vraiment trompé de dossier, avez commis une faute de frappe ou autre
";
echo "2) Soit vous utilisez Mozilla Firefox, qui ne sait pas conserver le chemin complet réel d'un dossier, et ne
";
echo "retourne que le nom du fichier, sans son chemin, qu'on lui demande 'dirname', 'basename', ou même 'realpath'
";
echo "Essayez avec un navigateur sérieux, comme IE7, et vous verrez, tout rentrera dans l'ordre !
";
}
else { echo "Téléchargement de $reporg sur $serveur/$user/$repdest/ réussi
"; }
// Fermeture de la connexion
ftp_quit($conid);
return $x; // */
}
?>

<form action="#ftp" method="post" name="feuteupeu">
<label> Serveur ? </label>

<label> Login ? </label>

<label> Mot de passe ? </label>

<label> Dossier à charger ? (Choisir un fichier au hasard dans le dossier pour initialiser le chemin) </label>

<label> Vers quel dossier distant ? </label>




</form>



<?php
if (isset($_POST['file'])) // si l'init variables par l'u se déroule bien
{
$ser=$_POST['serveur'];
$use=$_POST['login'];
$mdp=$_POST['mdp'];
$rep=$_POST['file']; // nous avons récupéré le répertoire d'origine (du moins sous IE7)
$nom=basename($_POST['file']); // le nom du fichier seul... que l'on va soustraire au nom complet
$a=strlen($nom); $b=strlen($_POST['file']); $c=$b-$a; // petite gymnastique nécessaire pour
$rep=substr($rep,0,$c); // remettre l'antislash à la fin du chemin
$dst=$_POST['dest'];
echo 'Nous nous connectons sur le serveur : ' . $ser . '
';
echo 'En tant qu\'utilisateur : ' . $use . '
';
echo 'Avec le mot de passe : ' . $mdp . '
';
echo 'Pour uploader le dossier : ' . $rep . '
';
echo 'Vers le dossier du serveur : ' . $dst . '
';
echo 'En mode binaire par défaut.
';
echo 'Le nombre de fichiers uploadé est de : ' . fetepe($ser,$use,$mdp,$rep,$dst) . '

';
// echo '
' . realpath($_POST['file']) . '
' . $_POST['file'] . '
' . $nom . '
' . $rep . '
' . '
' . '
' . '
' ;
}
?>
Messages postés
1
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
22 avril 2008

Bonjour,

J'ai tester une connexion réseau sur un Xp, 2000, ou 2003, et à chaque fois il me précise Unable to open Z:\dossier\.

Donc, je me demande si vraiment on peut sélectionner un répertoire locale et uploader tout ceci. Cela me semble étonnant.

Enfin, je vais bien revérifier ce code, dont je remercie tout de même l'auteur pour sa mise en ligne.
Messages postés
1
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
12 février 2008

Chouette, ce dont j'avais besoin !

Merci
Messages postés
10
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
23 novembre 2007

Pour en revenir à la remarque =>

"Warning: opendir(C:\temp\test\) [function.opendir]: failed to open dir: No such file or directory in new_rep.php on line 24" indique que le script ne peut pas lire les dossiers qui ne se trouvent pas dans l'arboressance du serveur."

En effet il faut que les dossier se trouvent sur l'arborescence du serveur. Pour les personnes débutantes cela ne signifie pas forcément que les dossiers doivent être sur le même pc, mais par exemple sur un autre pc du réseau local, en effet il suffit de "mapper" le disque dur d'e l'ordinateur où se trouvent les dossiers et le déclarer comme lecteur réseau au niveau de ton pc d'où tu execute le scritp. en gros tu lui atribue par exemple la lettre Z: Et la on reste dans le domaine de "la même arborescence" et le script fonctione donc parfaitement. (c'est de cette manière que je l'utilise).
Afficher les 18 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.