Ma gestion de l'upload

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 435 fois - Téléchargée 29 fois

Contenu du snippet

Voila comment je gère l'upload sur mon site et ma fois ca marche pas mal.
PS : j'ai bien sur changer les tests de sécurité !!

Source / Exemple :


la page HTML : 
<form action="traitement.php" method="post" enctype="multipart/form-data" name="fichier">
<input name="MAX_FILE_SIZE" type="hidden" value="20000"> 
// la taille est ici limitée à 20000 caractères
<input type="file" name="file">
<input type="submit" name="Submit" value="Envoyer">
</form>

le traitement :
<?
if (isset ($file) && $HTTP_POST_FILES["file"]["error"]==0 && $HTTP_POST_VARS['MAX_FILE_SIZE']>=$HTTP_POST_FILES["file"]["size"])
// les vérifications d'usage (la variable existe, pas d'erreur et la taille est correcte )
{
$nom=$HTTP_POST_FILES["file"]["name"]; 
// récupération du nom du fichier
$point=strrpos($nom,"."); // on recherche le dernier point dans le nom du fichier
if (!$point) $ext=""; else $ext=strtolower(substr($nom,$point));
// pour récuperer l'extension du fichier
if (($ext==".zip") || ($ext==".sql" )) // pour l'exemple je ne garde que ces 2 extensions valides
{
// pour la sécurité on choisit un nouveau nom de fichier ici on ajoute 1,2.. et une extension
$nombre=1;
$repertoire_upload="uploadphp/";
$nouveau_nom=$repertoire_upload.$nom.$nombre.$ext.".ttt";// encore pour la secu, j'ajoute un .ttt comme seconde extension
while (file_exists($nouveau_nom))
{
$nombre++; // on incremente le nombre tant que le nom du fichier existe
$nouveau_nom=$repertoire_upload.$nom.$nombre.$ext.".ttt";
}// fin while
if (@move_uploaded_file($file,$nouveau_nom)) echo "Téléchargement réussi"; else echo " Echec du transfert";
// le point crucial qui tranfert le fichier temporaire en fichier permanent avec @ devant pour éviter un warning PHP en cas d'échec
}// fin if ext
else 
{
$erreur="le type de fichier est invalide ( seulement .sql et .zip ).";
echo $erreur;
}// fin else ext
}// fin du premier if
else echo "Vérifier le formulaire d'envoi de fichier ( la taille du fichier est limité à ". $HTTP_POST_VARS['MAX_FILE_SIZE']." )";
?>

Conclusion :


J'espère avoir été assez clair, sinon un petit tour sur http://www.php-easy.com pour les questions et les remarques. merci

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2004

j'arrive pas à fixer ce probleme, j'ai tjrs ce message
Vérifier le formulaire d'envoi de fichier ( la taille du fichier est limité à 20000 )
meme si la taille du doc est plus petite que ça
Messages postés
270
Date d'inscription
mercredi 5 novembre 2003
Statut
Membre
Dernière intervention
11 septembre 2004
1
TA source est trop bien elle marche très bien sur free
Messages postés
143
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
19 mai 2015

Moi g plus court car c'est en une seule page mais je tiens à préciser que ce n'est pas moi qu'il a fait :
<html>
<head>
<title>Upload de fichiers</title>
</head>

<center>
<?
/*-------------------------------------------------------------
VARIABLE(S) A MODIFIER
--------------------------------------------------------------*/

// Chemin du répertoire de destination, exemples pour :
// windows : $destination="C:\windows\temp";
// unix : $destination="/usr/WWW/tmp";

//$destination="Upload";
$destination="Upload/$from";

// Taille maximale autorisée en octets
$taille=1000000;


/*-------------------------------------------------------------
CAS : ENREGISTREMENT DU FICHIER SUR LE SERVEUR
--------------------------------------------------------------*/

switch($action) {

case "add";
if ($userfile_size!=0) {$taille_ko=$userfile_size/1024;} else {$taille_ko=0;}
if ($userfile=="none") {$message="Mets un nom de fichier !
";}
if ($userfile_size>$taille)
{
if($taille!=0)
{
$taille_max_ko=$taille/1024;
}
$message="Désolé !Mais ($taille_max_ko ko max) c'est un peu gros !
";
}
if ($userfile!="none" && $userfile_size<$taille && $userfile_size!=0)
{
$userfile=stripslashes($userfile); // pour windows
if (!copy($userfile, "$destination/$userfile_name"))
{
$message="
Erreur le fichier $userfile_name n'a pas été stocké sur le compte $from !
";
}
else
{
$message="Bravo le fichier $userfile_name a été stocké sur le compte de $from !
A l'URL suivante :
http://antoyoda.free.fr/Upload/$from/$userfile_name
";
}
}
printf("$message");
break;

/*-------------------------------------------------------------
CAS : AFFICHAGE DU FORMULAIRE
--------------------------------------------------------------*/
default;
echo "Upload de fichiers
";
echo "

<FORM ENCTYPE="multipart/form-data" ACTION="index.php" METHOD="post">
Compte :,
<select name="from" type="text"><option value="SKYH@CKER">SKYH@CKER</option><option value="GOD TEX">GOD TEX</option><option value="MAXI3000">MAXI3000</option><option value="PHPMAN">PHPMAN</option><option value="KP85">KP85</option><option value="TOUS">TOUS</option></select>,

----

Fichier :,
,

----

</FORM>";
break;
}
?>





</html>
Messages postés
118
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
28 décembre 2006

Salut , bien le script ...

j'ai fait une modif pouir avoir plusieur champs avec le meme code ...
sa donne sa :

--------------------------------------- // -------------------------------------
index.php

<form action="traitement.php" method="post" enctype="multipart/form-data" name="file">

// la taille est ici limitée à 1 Mo :
<?php
$a=10;
for ($i=1;$i<=$a;$i++){
echo "
";}
?>

</form>

--------------------------------------- // -------------------------------------
traitement.php

<?
$a=10;
for ($i=1;$i<=$a;$i++){ // la boucle pour avoir les bonnes variable



if (isset ($file$i) && $HTTP_POST_FILES["file$i"]["error"]==0 && $_POST['MAX_FILE_SIZE']>=$HTTP_POST_FILES["file$i"]["size"])
{
$nom=$HTTP_POST_FILES["file$i"]["name"];

...
}

seulement voila ... pour la variable : isset ($fichier$i)
je sais pas comment faire pour que sa marche. la variable

$HTTP_POST_FILES["file$i"]["name"]; fonctionne meme tout le reste mais la variable 'if (isset ($file)' et 'if (@move_uploaded_file($file,$nouveau_nom)) '
Sa ne marche pas ... si quelqu'un trouve la reponse ... on pourrai ameliorer ce script :)
Merci d'avance .
Messages postés
323
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
17 mai 2005

Afficher les 9 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.