Salut à tous
J´ai un site, basé sur le principe d´imageshack, et donc j´ai un script d´upload de fichier. le voici :
<?php
// Récupération du dossier dans lequel le fichier sera uploadé //
$DESTINATION_FOLDER = $_POST["up/"]; //
// Taille maximale de fichier, valeur en bytes //
$MAX_SIZE = 20000000; //
// Récupération de l´url de retour //
$RETURN_LINK = $_SERVER[´HTTP_REFERER´]; //
// Définition des extensions de fichier autorisées (avec le ".")//
$AUTH_EXT = array(".jpg", ".png", //
".bmp", ".gif", ".JPG", ".JPEG", ".jpeg"); //
//
- ###############################################
- ####### //
// Fonction permettant de créer un lien de retour automatique
function createReturnLink(){
global $RETURN_LINK;
echo "<a href=´".$RETURN_LINK."´>Retour</a><br>";
}
// Fonction permettant de vérifier si l´extension du fichier est
// autorisée.
function isExtAuthorized($ext){
global $AUTH_EXT;
if(in_array($ext, $AUTH_EXT)){
return true;
}else{
return false;
}
}
// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.
if(!empty($_FILES["file"]["name"])){
// Nom du fichier choisi:
$nomFichier = $_FILES["file"]["name"] ;
$nomFichier = strtr($nomFichier,
´ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúû
üýÿ´,
´AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuu
uyy´);
$nomFichier = preg_replace(´/([^.a-z0-9]+)/i´, ´_´, $nomFichier);
// Nom temporaire sur le serveur:
$nomTemporaire = $_FILES["file"]["tmp_name"] ;
// Type du fichier choisi:
$typeFichier = $_FILES["file"]["type"] ;
// Poids en octets du fichier choisit:
$poidsFichier = $_FILES["file"]["size"] ;
// Poids en Kilo-octets du fichier choisit:
$poidsFichierK = $poidsFichier/1024;
// Pré formatage en affichage avec 0 chiffre après la virgule , donc pas de virgule.
$poidsFichierK = sprintf("%.0f", $poidsFichierK) ;
// Code de l´erreur si jamais il y en a une:
$codeErreur = $_FILES["file"]["error"] ;
// Extension du fichier
$extension = strrchr($nomFichier, ".");
// Si le poids du fichier est de 0 bytes, le fichier est
// invalide (ou le chemin incorrect) => message d´erreur
// sinon, le script continue.
if($poidsFichier <> 0){
// Si la taille du fichier est supérieure à la taille
// maximum spécifiée => message d´erreur
if($poidsFichier < $MAX_SIZE){
// On teste ensuite si le fichier a une extension autorisée
if(isExtAuthorized($extension)){
// Ensuite, on copie le fichier uploadé ou bon nous semble.
$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.($nomFichier));
if($uploadOk){
}else{
echo("L´upload a échoué !< br><br>");
echo(createReturnLink());
}
}else{
echo ("Les fichiers avec l´extension $extension ne peuvent pas être uploadés !< br>");
echo (createReturnLink()."<br>");
}
}else{
$tailleKo = $MAX_SIZE / 1000;
echo("Vous ne pouvez pas uploader de fichiers dont la taille est supérieure à : $tailleKo Ko.<br>");
echo (createReturnLink()."<br>");
}
}else{
echo("Le fichier choisi est invalide !< br>");
echo (createReturnLink()."<br>");
}
}else{
echo("Vous n´avez pas choisi de fichier !< br>");
echo (createReturnLink()."<br>");
}
?>
Il fonctionne tres bien, mais je voudrais ajouter une ligne (ou plusieurs ?) pour que si un fichier1 porte le même nom que le fichier2 que l´on va uploadé, il ne soit pas écrasé, et donc que le fichier2 change de nom.
J´ai vu une page qui parlais vaguement de ça :
http://www.phpfrance.com/forums/voir_sujet-545.php
et je me demandais si cette ligne avait un intérêt :
// définit un nom de fichier destination unique à partir du nom du fichier original formaté
$destination_file = time().formatFileName($_FILES[´aFile´][´name´]);
bref, merci d´avoir lu !
:-?