Page 1 sur 1

charge un fichier d'un ordinateur a un serveur web.

Posté : 17 juil. 2010, 09:45
par hakazizi
Bonjour ma question est toute simple et pourtant je n'arrive a rien.
Pour envoyé un mail avec pièce jointe avec la fonction mail est-il nécessaire de charger le fichier sur le serveur.
J’en suis encore à ma recherche d'information pour codé un envoie avec mail(); avec une pièce jointe.
Merci.

Re: charge un fichhier d'un ordinateur a un serveur web.

Posté : 17 juil. 2010, 11:05
par loboblahz
Oui c'est nécessaire que tu ai le fichier sur ton serveur.

En ce qui concerne l'envoi en pièce jointe. Je te recommande plutôt de voir du côté de PHPMailer, ce petit article en français sera sûrement intéressant :
http://www.zhell.fr/2009/09/envoi-de-ma ... phpmailer/

Re: charge un fichhier d'un ordinateur a un serveur web.

Posté : 18 juil. 2010, 13:17
par hakazizi
merci j'ai déja été voir du coté de phpmailer, je n'y est pas trouvé ma solution.
J’ai oublié de préciser que c'était à partir d'un formulaire.
Pour ce qui est du code html il suffit de rajouté a la balise form l'attribut ' enctype="multipart/form-data" ',
Et dans la balise input mettre le type en file ' type="file" '.
Je ne sait pas comment récupérer le fichier et si il faut le charge sur le serveur il faut donc le détruire après l'envoie et ce pour des raisons de sécurité.
Aie, aie, aie, je suis pas sorti de l’auberge je n'y suis même pas encore entré... :cry:

Re: charge un fichhier d'un ordinateur a un serveur web.

Posté : 18 juil. 2010, 14:03
par Ryle
Le forum FAQ contient des explications détaillées sur ce sujet :
:arrow: Téléchargement de fichiers avec vérification et renommage

pour la suppression du fichier, regarde du côté de unlink :)

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 00:07
par hakazizi
merci ryle
voila cela fonctionne pour la sécurité chacun vois midi à sa porte...
$nam=basename($_FILES['essaie']['name']);
//on créé une suite aléatoire de 21 chiffre pour evité l'ecrasement je trouve cela beaucoup plus simple que la solution proposé et mathématiquement il est quasi impossible de tombe 2 fois sur la meme valeur.
$name1=rand(1,9);
for($i=0; $i<20; $i++){$name1.=rand(0,9);}
$name=''.$name1.''.$nam.'';
//on charge le fichier sur le sereur
move_uploaded_file($_FILES['essaie']['tmp_name'],'/chemin absolue vers le fichier/uploads/'.$name);

unlink('uploads/'.$name)

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 01:14
par stealth35
//on créé une suite aléatoire de 21 chiffre pour evité l'ecrasement je trouve cela beaucoup plus simple que la solution proposé et mathématiquement il est quasi impossible de tombe 2 fois sur la meme valeur.

hummm uniqid ?

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 08:05
par hakazizi
Le problème c'est que uniqid je m'en sert ensuite pour la frontière du mail.

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 08:33
par Berzemus
Le problème c'est que uniqid je m'en sert ensuite pour la frontière du mail.
mt_rand() génère une meilleure valeur aléatoire.

Et uniqid() n'est jamais qu'un timestamp avec les microsecondes en hex (sous unix, sous windows il me semble juste un timestamp).

Mais tu peux générer un hash d'après le fichier et le timestamp, une formule à ta sauce, qui sera bien plus unique qu'un chiffre basé sur rand().

Tout ça reste cependant fort inutile. Perso je préfère garder le nom du fichier (en limitant les caractères autorisés) et en ajoutant un timestamp en base 36, quelque chose comme ça. Ainsi, le nom du fichier reste unique, et on peut reconnaître le fichier à son nom.

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 17:26
par loboblahz
Deux petites fonctions (l'une dépendant de l'autre). Pour obtenir un nom de fichier vraiment unique. Même si tu ne les utilises pas, cela sera toujours utile.

getNewFileName () -> Renvoi un nom de fichier unique par rapport aux fichiers déjà présents dans le répertoire $pathDestination, en ajoutant un chiffre séquentiel à la fin du nom (avant l'extension) jusqu'à ce qu'aucun fichier du même nom n'existe dans le répertoire.

fileGetExtension() -> Renvoi l'extension du nom de fichier passé en paramètre.
<?
function getNewFileName($fileName,$pathDestination){
		$fileExtension			=	fileGetExtension($fileName);
		$fileNameNoExtension	=	str_replace($fileExtension,'',$fileName);
		$j = 0;
		while (is_file($pathDestination.$fileName)){
			$j++;
			$fileName	=	$fileNameNoExtension.'_'.$j.$fileExtension;
		}
		return $fileName;
}

function fileGetExtension($fileName){
	$fileExtension=strrchr($fileName,'.');
	if  ($fileExtension===false){ $fileExtension = ''; }
	return $fileExtension;
}
?>

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 17:43
par stealth35
pour fileGetExtension c'est pathinfo, et pour getNewFileName c'est plus simple de récupérer la dernière incrémentation avec un glob :wink:

Re: charge un fichier d'un ordinateur a un serveur web.

Posté : 19 juil. 2010, 18:37
par loboblahz
Pour ce qui est de pathinfo, j'avais fait ces deux fonctions pour l'éviter justement, à cause de son bug avec les caractères accentués sur les fs utilisant UTF-8 dans certaines versions PHP.
Pour glob en effet. A voir si n'est pas soumis au même bug que pathinfo.