8791 sujets

Développement web côté serveur, CMS

Bonsoir !

Dans un form d'upload, aucun soucis pour les types en minuscules
mais lorsqu'il s'agit de fichier avec des noms en majuscule, patatra ....
c'est le boxon

Comment dois je faire pour que l'upload d'un fichier nommé DSC_1234.JPG fonctionne ?
En le renommant en dsc_1234.jpg, plus de pb !!

malgré l'ajout de :

$allowed_types = array("image/jpeg","image/jpg","image/JPEG","image/JPG");


voici mon source :


$MAX_FILE_SIZE = 2000000;	// Taille max = 2 Mo

$folder = 'upload/';

$allowed_types = array("image/jpeg","image/jpg");

$fname	= $_FILES['fichier1']['name'];
$ftype	= $_FILES['fichier1']['type'];
$fsize	= $_FILES['fichier1']['size'];
$ftmp	= $_FILES['fichier1']['tmp_name'];
$size	= $fsize/1000000;

$name = explode('.',$fname);
$fnom = $name[0];
$fext = $name[1];

$ida = $_SESSION['id'];
$ido = $_GET['idoeuvre'];
$frenom = $ida.'_'.$ido.'_1'; // Pour renommer la photo avec l'id_artiste et l'id_oeuvre

// Diverses test afin de savoir si :

// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)) // Test sensible à la casse
$error = 1;

// La taille du fichier n'est pas dépassée
elseif($fsize > $MAX_FILE_SIZE)
	$error = 2;

// Les conditions d'upload sont OK
else $error = 0;
$queryinsert = "UPDATE oeuvres SET online=0, file1='$frenom' WHERE id=$ido";

mysqli_query($connect,$queryinsert)
or die ('Error in query: '.$queryinsert.'<br>'.mysqli_error($connect));

switch($error)
{
	case'0': copy($ftmp,$folder.$frenom.'.'.$fext);
	if($fsize < 1000000) // Si la taille du fichier fait moins de 1 Mo, afficher taille en Ko
	{
		$psize = intval($fsize/1000); // pour ne pas afficher les chiffres apres la virgule
		echo "Le fichier <b>$fnom</b> ayant pour extention <b>$fext</b> de <b>$psize Ko</b>, de type <b>$ftype</b> a été correctement envoyé.";
	}
	else // Si la taille du fichier fait plus de 1 Mo, afficher taille en Mo
	{
		echo "Le fichier <b>$fnom</b> ayant pour extention <b>$fext</b> de <b>$size Mo</b>, de type <b>$ftype</b> a été correctement envoyé.";
	}
	break;

	case'1':
	echo "Format de fichier incorrecte. Format envoyé : $ftype";
	break;

	case'2':
	echo "Fichier trop volumineux. Taille envoyée : $fsize";
	break;
}
Une petite recherche sur le forum et HOP ! Smiley smile

Sinon je pense que si tu fais un

$_FILES['fichier1']['name'] = trtolower($_FILES['fichier1']['name']) 


Ca pourrait l'aider.

J'ai pas testé mais c'est une idée comme ca.
Modifié par Cocci_uk (26 Nov 2007 - 09:18)
Salut,
Cocci_uk a écrit :
$_FILES['fichier1']['name'] = trtolower($_FILES['fichier1']['name']) 
Tu voulais dire :
$fname	= [b]s[/b]trtolower($_FILES['fichier1']['name']);
je suppose Smiley cligne .


Sinon, quelques remarques :

- ça ne sert à rien de rajouter "image/JPEG" et "image/JPG" puisqu'il s'agit du mime-type renvoyé et pas de l'extension : ce sera donc toujours en minuscule.

- 1 Mo = 1024 ko = 1048576 octets Smiley murf

- la suggestion de Cocci_uk devrait fonctionner ou alors il suffit de faire :
$fext = strtolower($name[1]);

A+ Smiley smile
à noter qu'il existe une méthode plus fiable (si le système accepte) pour obtenir le mime-type d'un fichier (celle que tu utilise se basant sur l'extension).

// $file contient le chemin vers le fichier
$fileMime = exec('file -i -b '.escapeshellarg($file));
Bonsoir les gens !!

je vais essayer vos differentes propositions que je n'ai pas pu consulter plus top, car mon systeme a planté => reinstallation obligée blablabla ....

bref, je me remet au code et je vous tient au courant

a+