[AIDE svp]FTP php

Signaler
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010
-
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010
-
Bonjour à tous,

voila j'ai un script php qui me permet d'acceder à mon serveur ftp
en fonction fonction du login et du mdp je m'explique

quand je rentre un login et mdp j'arrive dans le dossier qui appartient a la personne qui c'est connecté jusque la pas de probleme

ex :
toto mdp test
arrivera dans son dossier toto et ne pourra voir que toto

maintenant imaginons que toto soit un employé et qu'il possede des clients
ainsi lorsque toto se connectera au ftp il pourra voir les dossiers de ses clients, mais les clients ne pourront voir que leur dossier

(c'est bon tout le monde suit ;) )

voila le problème j'ai couplé se script avec un systeme de mail automatique
comme ca si toto dépose un fichier dans son dossier ftp cela envoie un mail au client (en gros toto rentre juste le mail du client)

et le client recevra un mail du type :

toto@bidul.fr

Nom expediteur : toto
Prenom :merguez

Message : envoi du fichier comme convenu

uploader : ftp://@ftp/nom_du_fichier
le client clique sur le lien et doit rentré les identifiants de toto
pour récupérer le fichier


ce que j'aimerai c'est que toto puisse déposé le fichier directement dans le dossier du client qu'il choisi comme ca le client n'aura qu'a inserer son mdp et son login pour acceder à son dossier

je ne sais pas si c'est très clair
Enfin si vous avez une idée
Merci de m'aider

14 réponses

Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
C'est pas tres clair ^^
C'est pas juste une histoire de droits sur les dossier tout ca ?
Si toto a tout les droit sur les dossiers clients sur bah sa devrai etre fesable.
Je comprends pas trop ou est le souci ^^
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

je me disais aussi que ce n'était pas clair^^

je vais essayé de mieux expliquer :
quand j'utilise fillezilla, je me connecte sous le compte d'un employé
alors dans la fenêtre de droite je vois les sous dossiers des clients donc pour déposer un fichier, je fais un glisser dans le répertoire que je veux
ainsi le client qui se connecte verra le fichier dans son dossier

maintenant je dois essayé de faire la même sans fillezilla...
c'est dire que l'employé pourra choisir dans quel sous dossier mettre son fichier

car à l'heure actuel dans mon script php lorsque l'employé dépose un fichier celui ci se met dans son dossier et donc le client pour accéder à ce fichier devra entrer les mot de passe de l'employé et niveau sécurité c'est pas top...

exemple plus concret : je dois récupérer ton courrier sauf qu'au lieu de me donner les clés de ta boite au lettre tu me donne les clés de chez toi
on est d'accord que c'est moyen...

donc chez moi les clés de la maison c'est le dossier de l'employé (avec son mot de passe)
et les clés de la boite au lettre le dossier du client

je ne sais pas si c'est plus clair...
je peux mettre le script mais il est long...
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
C'est mieux :)

Et si tu lui envois par mail un lien vers une page d'autentification qui va
initialiser une connexion ftp grace un script php vers un autre dossier que celui de toto, celui du client entre autre sa marcherai non ?

Un truc du style :

Pour telecharger cliquez ici : http://monsite/auth.php?user=nom_du_client&file=nom_du_fichier

Comme ca tu pre-rempli le champ login ensuite il tape son mdp et tu lance une connexion ftp depuis la page
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

en faite c'est pas si simple que ca :
quand un client ou un employé se connecte sur le site celui ci à une authentification
ensuite j'ai une page envoi_formulaire qui associe la connexion au ftp et
l'envoi de mail.

la connexion au FTP se fait en récupérant le login et le mdp(crypté) stocké dans les variables de sessions ensuite je fais un ftp_put comme ceci :

$ftp_server= xxx.xxx.xxx.xxx;
$ftp_user_name	= $_SESSION['login'];
$ftp_user_pass	= $_SESSION['pass'];

elseif(!($conn_id = ftp_connect($ftp_server)))
{
echo "Impossible de se connecter au serveur FTP.";
}
elseif(!ftp_login($conn_id, $ftp_user_name, $ftp_user_pass))
{
echo "Impossible de se logger au FTP.";
}
elseif(!ftp_put($conn_id, $_FILES[$nom]['name'] , $_FILES[$nom]['tmp_name'] , FTP_BINARY))
{
echo "Impossible de transférer le fichier";
}
else
{
$fichier=$_FILES[$nom]['name'];
$status="Fichier transférer avec succès"; 
                 }

donc en faite pour deposer le fichier on se connecte avec les identifiants de la personne
le prob c'est que un client et un employé auront 2 login différents et 2 mdp different donc je suis coincé
et la méthode par ton lien ba ca pose problème aussi user=client mais le client dois se connecter sur la session ftp de l'employé comme l'employé doit se connecter sur la session ftp pour accéder au contenu...
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
En testant le type de compte sa contenerai le probleme en rajoute une mini etape :
$ftp_server= xxx.xxx.xxx.xxx;
if (est_tu_un_employe)
{
// Envoi specifique :
// je cherche $_POST['je_veux_envoyer_la'] si le client ou l'employe //existe bien et si oui alors je recupere le pass
if (isset($_POST['je_veux_envoyer_la'] && isset($_POST['je_veux_envoyer_la'] != $_SESSION['login'])
{
// Ici ta requete qui recupere le pass
$ftp_user_name = $_POST['je_veux_envoyer_la'];
$ftp_user_pass = pass que j'ai trouve;
}
else
{
// Envoi part defaut a la personne connectee
$ftp_user_name = $_SESSION['login'];
$ftp_user_pass = $_SESSION['pass'];
}

sa va juste te rajouter un champ de formulaire en plus pour les employes pour savoir a qui ils envoi le fichier sinon si c'est un client il va directement chercher le fichier.

Maintenant un non employe se connecte automatiquement avec ses propres identifiant et un employe lui a la possibilite de specifier a qui il envoi via un formulaire.

Maintenant dans ton mail il ne te reste plus qu'a rajouter un parametre comme ca :

lien : monsite.php?dl=true et tu teste a l'autentification si authentification ok et dl est a true alors header('Location: le_script_ftp.php');
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

ton idée est pas mal, par contre la redirection sur le_script_ftp.php bas ca va pas etre possible vu que je l'ai foutu dans la meme page que l'envoie du mail.

bon voila comment ca s'articule :
accueil.php = > page d'authentification
en fonction du privilege :
admin => redirection accueilAdmin
user => redirection accueilUser ==> page qui contient formulaire_envoie_de_document.php (avec la connexion au ftp et l'envoie de mail)
client => redirection accueilClient =>> page contenant le meme formulaire que pour user

voici le code de la page formulaire_envoie_de_document :

<?php
session_start(); // On relaye la session

if ($_SESSION['authentification'])
{ // vérification sur la session authentification (la session est elle enregistrée ?)
// ici les éventuelles actions en cas de réussite de la connexion
}
else {
header("Location:accueil1.php?erreur=intru"); // redirection en cas d'echec
}
?>
<?php

// ---------------------------------- editer ici ---------------------------------



// Le chemin complet ou seront stocké les fichiers Uploadé.
 	$up_full = "ftp://XXX.XXX.XXX.XXX";

// Le chemin du dossier
$up_dir = "/test/";

// Le nombre de fichiers qu'il est possible d'Uploader
$UploadNum = "1";

//Le titre de votre site
$titresite = "un titre au pif";

//Adresse de la page d'acceuil
$siteadresse = "http://127.0.0.1/monsite/Test2/accueilUser.php";

//Insérer une image en haut du formulaire
//L'images peut être stocké à la racine ou dans un dossier Exemple:
//Racine ou même dossier que le formulaire: logo.JPG
//Dossier: images/logo.JPG
//$insertimghaut = "/test/images/logo.gif";

//Ne rien changer ici
$online_isp = "0";	
// --------------------------------------------------------------------------------- //

function unique_id()
{
$taille = 6;
$new_pass = '';
$lettres = "abcdefghijklmnpqrstuvwxyz123456789";
srand(time());
for ($i=0;$i<$taille;$i++)
{
$new_pass.=substr($lettres,(rand()%(strlen($lettres))),1);
}
define("timer", $new_pass);
}



if(isset($_POST["submit"]))
{
// ------------------------ Vérification du formulaire ------------------------- 

 $to = trim($_POST['to']); 
 $From =trim($_POST['From']); 
 $Name = htmlspecialchars(trim($_POST['Name'])); 
 $Prenom = htmlspecialchars(trim($_POST['Prenom']));
 

$Nada = '';
$Msg  = $_POST['Msg'];


if(empty($to))
{                 
    		$Nada.="Veuillez renseigner votre adresse Email!
";
}
if(empty($From))
{                 
    		$Nada.="Veuillez renseigner l'adresse Email du destinataire!
";
}
if(empty($Msg))
{
    		$Nada.="Veuillez inscrire un Message !
";
}
if(empty($Name))
{                 
    		$Nada.="Veuillez renseigner votre Nom!
";
}
if(empty($Prenom))
{                 
    		$Nada.="Veuillez renseigner votre Prenom!
";
}
$noway = "$Nada" ;

if(empty($Nada) && 
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$From))
{
$ok = TRUE;
}
elseif(!empty($Nada) && 
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$From))
{
$ok = FALSE;
}
if(empty($Nada) && 
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$to))
{
$ok = TRUE;
}
elseif(!empty($Nada) && 
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$to))
{
$ok = FALSE;
}
else
{
$ml = "Email invalide !
";
$ok = FALSE;
}
// ------------------------------------------------------------------------- //

// ----------------------------- Système d'upload ------------------------------ //

//Options
$nom 	= 'Fichier';
$maxsize		= 5*1024*1024*1024;
//extension à rajouter ci besoin
$extensions 	= array( 'jpg' , 'jpeg' , 'gif' , 'pptx', 'ppsx'  , 'png', 'bmp' , 'exe' , 'doc', 'xls' , 'ppt' , 'pps' , 'txt' , 'zip' , 'rar' , 'pdf' , 'dxf' , 'dwg' , 'avi' , 'wma' , 'flv');
$status='';
$fichier='';


$ftp_server = "XXX.XXX.XXX.XXX";
$ftp_user_name=$_SESSION['login'];
$ftp_user_pass= $_SESSION['pass'];    //probleme le mdp et crypté dans $_session or le compte ftp a besoin du mdp en clair...


//Messages
$ferrors = array('',
1 => "Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.",
2 => "Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.",
3 => "Le fichier n'a été que partiellement téléchargé. ",
4 => "Aucun fichier n'a été téléchargé. ",
6 => "Un dossier temporaire est manquant.",
7 => "Échec de l'écriture du fichier sur le disque.",
8 => "Une extension PHP a arrété l'envoi de fichier. PHP ne propose aucun moyen de déterminer quelle extension est en cause. L'examen du phpinfo() peut aider.",
);

//Prioriétés
if(!empty($_FILES[$nom])){
$extension = strtolower( substr( strrchr($_FILES[$nom]['name'], '.') , 1) );
}

//Vérifications
if(empty($_FILES[$nom]))
{
?>

<?php
}
elseif ($_FILES[$nom]['error']>0)
{
echo $ferrors[$_FILES[$nom]['error']];
}
elseif($_FILES[$nom]['size'] > $maxsize)
{
echo "Le fichier a une taille de ".$_FILES[$nom]['size']." octets, supérieur à la limite de $maxsize octets.";
}
elseif(!in_array($extension,$extensions))
{
echo "L'extension du fichier n'est pas acceptée.";
}

//Trasnfert sur le FTP
elseif(!($conn_id = ftp_connect($ftp_server)))
{
echo "Impossible de se connecter au serveur FTP.";
}
elseif(!ftp_login($conn_id, $ftp_user_name, $ftp_user_pass))
{
echo "Impossible de se logger au FTP.";
}
elseif(!ftp_put($conn_id, $_FILES[$nom]['name'] , $_FILES[$nom]['tmp_name'] , FTP_BINARY))
{
echo "Impossible de transférer le fichier";
}
else
{
$fichier=$_FILES[$nom]['name'];
$status="Fichier transférer avec succès";
//On peut éventuellement supprimer le fichier local
//unlink($path.$_FILES[$nom]['name']);
ftp_close($conn_id);


}

// ------------------------------------------------------------------------- //

// ----------------------------- Envoi du mail ------------------------------ //

// L'adresse à laquelle le formulaire sera envoyé.
unique_id();
if($ok == "TRUE")
{

$dest=$From;
ini_set("sendmail_from", $dest);
$referer = $_SERVER["HTTP_REFERER"];
 		$subject = "Envoi de document";
 		$body="\n------------\n\n";

$champs array ('Nom de l\'expediteur'> $Name, 'Prenom de l\'expediteur' => $Prenom, 'Message' => $Msg);

foreach($champs as $key => $val)
{
$body.="$key : $val \n\n";
}
    	 
 		
 		$body.="\n\n";
$body.="Upload : $status\n\n";
$body.="$up_full/$fichier\n\n";
 		$body.="------------------------\n";

        	$body = strip_tags(stripslashes($body));
  
 		if($online_isp == "1")
 		{
if(!email("feedback",$dest,$sujet,$sujet,$body))
{
print "Une erreur c'est produite durant l'envoi du mail.
";
}
 		}
 		else
{

$header = 'From: '.$to . "\r\n" .
'Reply-to: From: '. $to . "\r\n" .
'X-Mailer: PHP/' . phpversion();

if(!mail($dest, $subject, $body, $header ))
{
print "Une erreur c'est produite durant l'envoi du mail.
";
}
}
// ------------------------------------------------------------------------- //

// ---------------------------- Message d'envoi avec Succes ---------------------------- //
?>
<html>
<head>
<title>Media6 - Message envoyé!</title>
</head>


" border="0" alt="Media6">



<center>
<table width="550" border="0" cellspacing="1" cellpadding="2">
----,

Votre message a bien été envoyé.

<?php echo $status;
echo $fichier;
?>

Nouvel envoi

</td>

</td>
</tr>
</table>
</center>

</html>
<?php
}
// ------------------------------------------------------------------------- //
else
{
// ----------------------------- Message en cas d'erreur ----------------------------- //
?>
<html>
<head>
<title>Media 6 - Erreur durant l'envoi!</title>
</head>


" border="0" alt="Media6">


<center>
<table width="550" border="0" cellspacing="1" cellpadding="2">
----,

<?php echo $noway; echo $ml; echo $statut;?>

Une erreur c'est produite durant l'envoi de votre message.

Réessayer une seconde fois.

-Retour-

</td>

</td>
</tr>
</table>
</center>

</html>
<?php
// ------------------------------------------------------------------------- //
} 
}
else
{
$num = 0;
$upload_box = '';
while($num < $UploadNum)
{
$num++;
$upload_box.= "<tr><td>   Fichier $num:</td><td align='right'></td>";
}
?>
<html>
<head>
<title>Media6 - Envoi de document</title>
</head>

<!--
Formulaire de contact pour l'envoie de document :
le mail du destinataire
le nom de l'expiditeur
le prenom de l'expiditeur
les pieces à joindre
-->






Notice : Ce formulaire vous permet de déposer vos fichiers, dans votre dossier personnel sur le serveur FTP.
Une fois le dépot effectué, un email sera automatiquement envoyé au destinataire que vous aurez choisi.
Celui ci pourra récupérer le fichier en cliquant sur le lien fourni dans l'email.,

----

<table border="1" width="90%" bordercolor="#000000" bordercolordark="#FFFFFF" cols="1" align="center">
----,
<form action=\"<?php echo $_SERVER['PHP_SELF']; ?>\" method=\"post\" enctype=\"multipart/form-data\">

<table border=\"0\" bordercolor=\"#000000\" height=\"100\" align=\"center\">
----

Votre Email* : ,
,

----

Votre Nom* : ,
,

----

Votre Prénom* : ,
,

----

Email du destinataire* : ,


 Message* :  


<textarea name ="Msg" cols="45" rows="7"></textarea>




Si vous désirez envoyer un document, un plan etc...

<?php echo $upload_box; ?>







</form>
*Champs Obligatoires

</td>
</tr>
</table>
</td>
</tr>
</table>

</html>
<?php 
} 
?>

Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
function unique_id() sa existe pas deja en php sa ? :)
$maxsize = 5*1024*1024*1024;
en effet y'a de la marge :D

if ($_SESSION['authentification'])
{
Ca m'a l'air bien pour tester le type de compte :)
// vérification sur la session authentification (la session est elle enregistrée ?)
// ici les éventuelles actions en cas de réussite de la connexion
if (employe)
{
// L'employe est envoye vers le formulaire ou il specifie le fichier
// et le destinataire qui postera les variable dans ton script_ftp.php
header('Location: formulaire_upload.php');
}
else if (client)
{
// C'est un client on utilisera les donnees de la session pour se connecter au ftp
header('Location: script_ftp.php');
}
}

et hop :) par contre j'ai pas lut le code je suis sur autre chose en meme temps mais sa devrai s'integrer parfaitement :)
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

ba vu que j'ai fait un mixte de 2 scripts, j'ai mise a jour les fonction obselete apres pour unique_id() la fonction est pas top vu que que quand j'envoie un mail il me dit que l'id a pas été trouvé c'est peut une usurpation d'identité...
ouai pour la taille vu que la société ou je fais mon stage compte deposé de gros fichier (genre 4go)j'ai mis haut mais en faisant des tests je peux pas envoyé plus que 500Mo (pourtant dans les config php.ini et tout j'ai monté les tailles) :-)
au pire pour les gros fichiers y a fillezilla :-)

et quand tu as le temps regarde le script quand meme parceque j'ai tout couplé le script_ftp et l'envoi de mail
je regarderai pour ameliorer ca je voudrais deja trouvé une solution pour que la connexion au serveur fonctionne parceque l'identification du mdp crypté est pas reconnu...
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
Et tu veux que je regarde quoi en particulier sur le script ? ^^
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

heu tout ce qui te parait mauvais mdr, ou ce que je pourrai amélioré

et peut etre trouvé la solution à mon problème de mot de passe pour la connexion ftp (heu le mot de passe est crypté à partir du moment ou l'admin crée un user ou un client et se mot de passe est stocké dans une base de donnée sql)

je sais je suis chiante et j'en demande beaucoup ^^
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
Il est crypte avec quoi le mdp ?
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

MD5 et manque de pot je peux pas le déchiffrer...

par contre se que je comprend pas c'est que lorsque je me connecte au serveur ftp via console ou via fillezilla cela passe (alors que le mot de passe est déjà crypté dans la base de données)
et quand je test avec l'appli php il me refuse la connexion

par contre quand je met le mot de passe en clair la connexion au ftp se fait via l'appli
Messages postés
255
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
4
Si j'ai le temps je regarderai ca mais je te promet rien dans l'immediat ^^
Messages postés
19
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 mai 2010

ok je vais continuer de chercher de mon coté même si ca fait deja 1 semaine que je suis bloquée et que je trouve pas d'alternative...
Mon stage fini le 30 mai donc j'aimerai que se soit fini vers le 26
en attendant je vais commencer le rapport pfff...

merci de pour ton aide