bon je vous montre le code:
<?php
header('Content-type: text/html; charset=UTF-8');
session_start();
// Fonction de renommage : si fichier.ext existe, renomme en fichier1.ext ; si fichier1.ext existe, renomme en fichier2.ext etc..
function Rename_fich($adresse_fichier)
{
//Si le fichier existe et est un fichier valide
if (is_file($adresse_fichier))
{
// Informations sur le fichier
$info = pathinfo($adresse_fichier);
$extension = $info['extension'];
$filename = $info['filename'];
$dossier = $info['dirname'];
// Cherche dans le nom de fichier des caractères numériques en fin de nom et si oui incrémente ce nombre grâce à la fonction anonyme create_function
$filename = preg_replace_callback('#([0-9]+$)#', create_function('$matches','return $matches[1]+1;'), $filename, '1', $count);
// Si des caractères numériques sont trouvés et incrémentés (le paramètre $count employé dans preg_replace_callback indique le nombre de remplacements), $filename prend sa nouvelle valeur, sinon l'ancienne concaténée à 1
$filename = !empty($count)? $filename : $filename.'1';
// Reconstruction du nom de fichier avec son extension (si elle existe)
$filename = !empty($extension) ? $filename.'.'.$extension : $filename;
// Reconstruction de l'adresse du fichier
$adresse = $dossier.'/'.$filename;
// Appel de la fonction pour re vérification avec le nouveau nom du fichier
return Rename_fich($adresse);
}
// Retourne le chemin complet du fichier
else return $adresse_fichier;
}
// Fonction qui interromp le script et recharge la page
function Reload_page ()
{
header("Location:".$_SERVER['PHP_SELF']);
exit;
}
// Fonction permettant de convertir une chaine de caractère en octets ex : "1K" est converti en "1024" (car 1 kilo octet = 1024 octets)
function Return_Octets($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last)
{
case 'g': $val *= 1024;
case 'm': $val *= 1024;
case 'k': $val *= 1024;
}
return $val;
}
// Si le fichier dépasse la taille maximum du POST autorisée par le serveur - correspond à la valeur ini_get('post_max_size') - les tableaux $_POST et $_FILES seront vides. Néanmoins la variable GET['form_file'] envoyée en même temps que le formulaire est récupérée. Donc si la première valeur n'existe pas mais que la seconde existe, nous sommes dans ce cas de figure.
if(!isset($_POST['chargement']) && isset($_GET['form_file']))
{
$_SESSION['resultat_telecharg'] = 'Fichier non téléchargé. Le fichier dépasse la taille maximum du POST autorisée par le serveur.';
Reload_page ();
}
// Téléchargement du fichier vers le serveur si les variables du formulaire sont transmises
if (isset($_POST['chargement'],$_FILES['userfile']['name']) && trim($_FILES['userfile']['name']) != '')
{
// Répertoire de destination par rapport à la racine du site, exemple PHOTO
$repertoire = 'arf/testphoto';
// Tableau des extensions de fichier autorisées
$extensions_ok = array('png','jpg','jpeg','gif');
// Initialisation de la variable affichant le message de résultat du téléchargement
$_SESSION['resultat_telecharg'] = null;
// Gestion des erreurs c.f. <a href="http://www.php.net/manual/fr/features.file-upload.errors.php" class="postlink" onclick="window.open(this.href); return false;">ce lien</a>
switch ($_FILES['userfile']['error'][$i])
{
case "1" : $_SESSION['resultat_telecharg'] = "Le fichier excède la taille de fichiers autorisée par le serveur";break;
case "2" : $_SESSION['resultat_telecharg'] = "Le fichier excède la taille de fichiers autorisée dans le formulaire";break;
case "3" :
case "4" :
case "6" :
case "7" :
case "8" : $_SESSION['resultat_telecharg'] = "Fichier non téléchargé. Problème lors du téléchargement";break;
}
// Si le fichier n'est correctement chargé on sort du script
if ($_FILES['userfile']['error'] !== 0) Reload_page ();
// Adresse racine du serveur
$adresse = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
// Adresse du répertoire de destination
$destination = $adresse.$repertoire.'/';
// Vérification de la validité du répertoire, si non valide (signifié par "!is_dir") on sort du script en ayant enregistré un message d'erreur
if (!is_dir($destination))
{
$_SESSION['resultat_telecharg'] = 'Chemin du dossier non valide';
Reload_page ();
}
// Nom du fichier téléchargé
$localfile = $_FILES['userfile']['name'];
$localfile = $_FILES['userfile']['name'];
// Trouve l'extension du fichier et la met en minuscules
$extension = strtolower(substr($localfile,strrpos($localfile, ".")+1));
// Vérification que l'extension est contenue dans le tableau des extensions autorisées. Dans le cas contraire (signifié par "!in_array") on sort du script en ayant enregistré un message d'erreur.
if (!in_array($extension,$extensions_ok))
{
//Transforme le tableau en chaine de caractères séparés par une virgule suivie d'un espace pour affichage dans le message d'erreur
$extensions_autorisees = implode(', ',$extensions_ok);
// Message d'erreur d'extension du fichier
$_SESSION['resultat_telecharg'] = 'Extension du fichier non autorisée. Extensions autorisées : '.$extensions_autorisees.'.';
Reload_page ();
}
// Remplacement des caractères accentués par leur équivalent
$nom_fichier = iconv('UTF-8', 'ASCII//TRANSLIT', $localfile);
// Nettoyage des caractères non valides (reste les caractères alphanumériques et '.', '_', '-')
$nom_fichier = preg_replace('#[^.a-z0-9_-]+#i', '', $nom_fichier);
// Si après traitement le résultat est une chaine vide, on renregistre un message d'erreur et on sort du script
if (trim($nom_fichier) == '')
{
$_SESSION['resultat_telecharg'] = 'Nom de fichier non valide. Veuillez renommer votre fichier avant le téléchargement';
Reload_page ();
}
// Adresse du fichier de destination
$adresse_fichier = $destination.$nom_fichier;
// Application de la fonction "Rename_fich" pour vérifier l'existence d'un fichier de même nom dans le répertoire et si oui, renommage du fichier de téléchargement
$adresse_fichier = Rename_fich($adresse_fichier);
// Si chargement du fichier - avec le nom temporaire créé par le serveur - vers l'adresse de destination
if(@move_uploaded_file($_FILES['userfile']['tmp_name'], $adresse_fichier))
{
// Nom du fichier final
$nom_fichier = basename($adresse_fichier);
// Préparation des messages de confirmation
$resultat1 = 'Le fichier "'.$localfile.'" a été téléchargé sur le serveur';
$resultat2 = 'Le fichier "'.$localfile.'" renommé "'.$nom_fichier.'" a été téléchargé sur le serveur';
// Création du message de confirmation
$_SESSION['resultat_telecharg'] = $localfile === $nom_fichier ? $resultat1 : $resultat2;
}
else
{
// Le fichier n'a pas été téléchargé on sort du script en ayant enregistré un message d'erreur.
$_SESSION['resultat_telecharg'] = 'Fichier non téléchargé. Problème lors du téléchargement';
Reload_page ();
}
//Recharge la page pour éviter un nouveau téléchargement en cas de rafraichissement de la page
Reload_page ();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exemple téléchargement avec renommage des fichiers si déjà existants</title>
<script type="text/javascript">
<!--
function Verif_attente(id_file,id_attente)
{
var id_file = document.getElementById(id_file);
if (typeof id_file != 'undefined' && id_file.value == '') return false;
var id_attente = document.getElementById(id_attente);
if (typeof id_attente != 'undefined')
{
// Nettoyage de l'élément cible
var nb_noeuds = id_attente.childNodes.length;
for (var i = 0; i < nb_noeuds; i++)
{
id_attente.removeChild(id_attente.firstChild);
}
var texte = 'Patientez...';
// Création du noeud texte
var noeud_texte = document.createTextNode(texte);
// Insertion du noeud texte
id_attente.appendChild(noeud_texte);
}
}
-->
</script>
<script language="javascript">
var nb = 0;
function add_input(){
nb++;
var div = document.getElementById('form_inputs');
input = document.createElement("input");
br = document.createElement("br");
input.setAttribute("type", "file");
input.setAttribute("name", 'userfile' + nb);
div.appendChild(input);
div.appendChild(br);
}
</script>
</head>
<body>
<div id = "message_tele"><?php if (isset($_SESSION['resultat_telecharg'])) {echo htmlspecialchars($_SESSION['resultat_telecharg']); unset($_SESSION['resultat_telecharg']);}?>
</div>
<div id="form_inputs"> <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?form_file=2'?>" method = "post" onsubmit = "Verif_attente('userfile','message_tele')">
<p>
<input type = "hidden" name = "chargement" value = "1"/>
<!-- Vous pouvez spécifier dans l'input "MAX_FILE_SIZE" la taille maximum que vous autorisez avec la fonction Return_Octets qui convertira votre valeur en octets.
exemples : Return_Octets('2M') pour indiquer 2 méga octets, Return_Octets('500K') pour 500 kilos octets, Return_Octets('1G') pour un giga octet ...
Cette valeur doit être inférieure ou égale à ini_get('upload_max_filesize') définie par le serveur -->
<input type = "hidden" name = "MAX_FILE_SIZE" value = "<?php echo Return_Octets(ini_get('upload_max_filesize'))?>" />
<input id = "userfile " name = "userfile[]" type = "file" size = "20" />
<input type="button" value="Ajouter une autre image" onClick="add_input()"/>
<input type = "submit" value = "Envoyez" style = "margin-left:5px" />
</p>
</form>
</div>
<p>Taille maximum par fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?></p>
</body>
</html>
Donc j ai ajouter les crochet à userfile mais je pense qu il doit manquer un truck comme une boucle dans se genre là
for (var i=0; i<n; i++)
par exemple pour faire plus d uplaod .
car pour le moment même avec les crochet de userfile il n inser que la premiére image et pas la seconde
Je n'utilse pas la classe mais le premier tuto de AB
merci