ptiloup73
Messages postés8Date d'inscriptionlundi 28 mars 2005StatutMembreDernière intervention25 septembre 2006
-
22 sept. 2006 à 16:51
ptiloup73
Messages postés8Date d'inscriptionlundi 28 mars 2005StatutMembreDernière intervention25 septembre 2006
-
24 sept. 2006 à 19:21
Voila j'ai fais un forumulaire d'upload avec un check de l'extention mais bon .. je ne comprends pas pourquoi il plante.. je débute en php donc je pense que l'erreur vient des if et elseif... mais j'ai besoin qu'on me corrige mon script... merci d'avance.
<?php
if(isset($_FILES['upload']))
{
unset($erreur);
$nom = $_FILES['upload']['name'];
$ext = '.'. substr(strrchr($nom, '.'), 1);
$ext = strtolower($ext); // On passe l'extension en minuscules
$ext = str_replace('.jpeg', '.jpg', $ext); // On remplace '.jpeg' par '.jpg'
$nom = strtolower(str_replace(' ', '_', $nom)); // On remplace les espaces dans le nom du fichier par un underscore, et on met le nom en minuscules.
$destination = '';
$max_file_size = 0;
if( !is_uploaded_file($tmp_file) )
{
$erreur='Le fichier est introuvable';
} elseif($ext '.jpg' OR $ext '.png' OR $ext == '.jpeg')
{
$destination = 'images/';
$max_file_size = 1000000;
if (!getimagesize($_FILES['upload']['tmp_name']))
{
exit("GD n'a pas reconnu le fichier en tant qu'image, script interrompu.");
}
elseif( file_exists($_FILES['upload']['tmp_name']))
{
exit("Fichier existant sur le serveur au mème nom!");
}
elseif( filesize($_FILES['upload']['tmp_name']) > $max_file_size)
{
exit("Fichier existant sur le serveur au mème nom!");
}
} elseif($ext '.zip' OR $ext '.rar')
{
$destination = 'download/';
$max_file_size = 100000000;
if( file_exists($_FILES['upload']['tmp_name']))
{
exit("Fichier existant sur le serveur au mème nom!");
}
elseif( filesize($_FILES['upload']['tmp_name']) > $max_file_size)
{
exit("Fichier existant sur le serveur au mème nom!");
}
}
elseif( !move_uploaded_file($tmp_file, $content_dir . $name_file))
{
$erreur='Impossible de copier le fichier dans $destination';
}
if(!isset($erreur))
{
move_uploaded_file($_FILES['upload']['tmp_name'],$destination.$nom.$ext))
$nom = $nom.$ext;
exit("Envoi du fichier effectué avec succès. Adresse du fichier: '$nom'");
}
else{echo($erreur);}
}
?>
cs_darkduck
Messages postés138Date d'inscriptionvendredi 28 février 2003StatutMembreDernière intervention29 février 20081 22 sept. 2006 à 22:23
Tiens un petit cadeau, voici la classe que j'ai créée :
<?php
function upload($champ_files, &$nom_fichier_transfere, $repertoire_destination, &$message,
$extensions_autorisees_array=array('pdf','jpg','jpeg','gif','png'),
$taille_max_fichier=2000000, $chmod=755)
{ /*Fonction qui transfère un fichier sur le serveur.
Retourne true si le transfert s'est déroulé correctement, false sinon.
Liste des paramètres :
- $champ_files : $_FILES['nom_du_champ']
- $nom_fichier_transfere (donnée-resultat) : Nom que l'on veut donner au fichier transféré
(modifié automatiquement si un fichier porte
déjà le même nom)
- $repertoire_destination : Chemin relatif du répertoire dans lequel on veut transférer le fichier
- $message (donnée-resultat) : Message généré par lors du transfert
- $extensions_autorisees : Tableau contenant la liste des extensions des fichiers autorisées
- $taille_max_fichier : Taille maximale (en octets) autorisée pour le fichier à transférer (Aide : 1Ko 1000 octets; 1Mo 1000000 octets)
- $chmod : Chmod du fichier transféré*/
/*On vérifie que $nom_fichier_transfere et $repertoire_destination ne soient pas vides*/ if ($nom_fichier_transfere '' OR $repertoire_destination '')
$message = 'Erreur : Vous devez préciser un nom à donner au fichier à transférer ainsi qu\'un répertoire de destination';
/*On vérifie que la taille du fichier à transférer n'est pas trop importante*/
elseif ($champ_files["size"] > $taille_max_fichier) //Si la taille de la fic est supérieure à la taille max
{
$taille_max_autorisee = $taille_max_fichier / 1000;
$message = 'Erreur : La taille du fichier que vous voulez transférer est trop grande.
'.br().
'Taille maximale autorisée : '.$taille_max_autorisee.' Ko';
}
else //Aucune erreur pour le moment
{
/*On supprime les accents et caractèers spéciaux*/
$nom_fichier_transfere = clearStr($nom_fichier_transfere);
/*On récupère l'extension du fichier envoyé*/
$extension_fichier = substr(strchr($champ_files["name"],'.'),1);
/*On récupère la liste des formats autorisés et on vérifie si l'extension du fichier est autorisée*/
$extension_autorisee = false; //Initialisation
foreach ($extensions_autorisees_array as $extension)
{
$str_formats_autorises .= $extension.', ';
/*On vérifie si l'extension du fichier est autorisée*/
if (!$extension_autorisee AND $extension_fichier == $extension)
$extension_autorisee = true;
}
/*Suppression de la ,(virgule) à la fin de $str_formats_aurorises*/
$str_formats_autorises = implode(', ', $extensions_autorisees_array);
if (!$extension_autorisee) //Si le format du fichier n'est pas valide
{
$message = 'Erreur : Le fichier que vous voulez transférer ne porte pas une extension autorisée.
'.br().
'Extension du fichier que vous voulez transférer : '.$extension_fichier.'
'.br().
'Extenstions autorisées : '.$str_formats_autorises;
}
else //Format valide
{
/*Si le fichier existe on le renomme de la forme nomDuFichier(X).extension*/
/*On renomme le fichier tant qu'un fichier porant le même nom existe*/
while (file_exists($repertoire_destination.$nom_fichier_transfere.$extension))
{
/*Suppression de l'éventuel (X) existant*/
$nom_fichier_transfere = str_replace('('.$i.')','',$nom_fichier_transfere);
/*On incrémente le compteur*/
$i++;
/*Ajout de (X)*/
$nom_fichier_transfere = str_replace($nom_fichier_transfere,$nom_fichier_transfere.'('.$i.')',$nom_fichier_transfere);
}
/*Nom de destination final*/
$nom_fichier_transfere = $nom_fichier_transfere.$extension;
if (is_uploaded_file($champ_files["tmp_name"])) //Si le fichier a été uploadé correctement
{
/*On renomme le fichier avec le nom du fichier envoyé (nom éventuellement maj)*/
if (!rename($champ_files["tmp_name"], $repertoire_destination.$nom_fichier_transfere))
{
$message .= "Envoi du fichier impossible";
}
else //Transfert réussi
{
/*On modifie les chmod du fichier*/
chmod ($repertoire_destination.$nom_fichier_transfere,'0'.$chmod);
$upload_reussi = true; //Transfert réusssi
$message = "Le fichier a correctement été transféré !";
}
}
}
}
ptiloup73
Messages postés8Date d'inscriptionlundi 28 mars 2005StatutMembreDernière intervention25 septembre 2006 22 sept. 2006 à 23:30
c'est une bonne base de travail.. mais si tu peux me dire comment faire pour pouvoir automatiser le fait que j'upload : un zip ou rar dans un dossier (upload) et les images dans un dossier (images), il faut encore que je puisse utiliser l'emplacement du fichier uploader comme une variable pour l'inscrire dans la base de donnée MySql...
pour ça il faut que je puisse faire la différence entre les types de fichier mais sans passé par le type MIME... cf autre navigateur pas forcement les mème MIME...
faire un code genre :
if isset blabl
{ [mes variables...]
if $ext jpg or $ext png
{
[variables...]
} elseif $ext zip or $ext rar
{
[variables...]
}
else { exit ("Bad format files!")}
}
echo $mon_fichier = $destination/$fichier.$ext
ptiloup73
Messages postés8Date d'inscriptionlundi 28 mars 2005StatutMembreDernière intervention25 septembre 2006 24 sept. 2006 à 18:35
Pour jean84 je ne connais pas les expressions regulieres... je suis plus que nouveau avec le php...
Mais j'ai fini mon script.. il ne fonctionne toujours pas.. et la c'est moi qui bug lol
au moment du move_uploaded_file il ne fait rien... pourtant toutes mes variable fonctionne testée avec des echo svp si vous avez une solution est-ce en raport avec le fait que je suis en localhost ? merci. pour info voila mon script fini :
<?php
if (empty($_POST['uploadname']))
{
echo 'You must enter the number of the news.';
}
else
{
if (!empty($_FILES['uploadfile']['name']))
{
$file = basename($_FILES['uploadfile']['name']);
$ext = strrchr($_FILES['uploadfile']['name'], '.');
$ext = substr($ext, 1);
if (($ext 'jpg') or ($ext 'png'))
{
//echo 'ceci est une image';
$dest='images/';
}
else
{ if (($ext 'zip') or ($ext 'rar'))
{
//echo 'ceci est une archive';
$dest='downlaod/';
}
}
echo '', $dest ,'
';
echo '', $file ,'
';
echo '', $_FILES['uploadfile']['tmp_name'] ,'
';
move_uploaded_file($_FILES['uploadfile']['tmp_name'], $dest . $file);
}
else
{
// enlever les accents
echo 'You must set the target file for uploading.';
}
}
?>