par
moogli » 19 oct. 2010, 21:42
salut,
j'ai testé (et un peu corrigé) ton code.
Je n'ai pas testé la partie MySQL.
Les images png et jpg sont bien récupérées et retaillées.
il y avait des erreurs au niveau des nom de fichier (pas de cohérence entre le code png et jpg).
Comme l'indique stealth35, il y a beaucoup de chose à faire pour éviter les soucis (par exemple tester le type mime plutôt que l'extension pour être "certain" qu'il s'agisse d'une image et pas d'un fichier php qui à été renommé (ou quoi que soit d'autre).
plus d'info =>
http://www.phpfrance.com/tutoriaux/inde ... e-fichiers
@+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>test</title>
<meta name="description" content="test"/>
<meta name="keywords" content="test"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<META NAME="revisit-after" CONTENT="7 day">
<META NAME="Robots" CONTENT="all">
<META NAME="language" CONTENT="FR">
<link rel="stylesheet" media="screen" type="text/css" title="Design sombre" href="styles\styles.css" />
</head>
<!--commentaire-->
<body>
<form method="POST" action="" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<fieldset>
<legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="up_photo">Photo :</label><input type="file" name="up_photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</fieldset>
</form>
</body>
</html
<?php
/* Ajout des 3 lignes ci dessous que l'on avait pas*/
$dest_dossier ='imagestest';
$dest_fichier = 'final';
$dest_dossier_mini = 'imagesmini';
$max_size='1000000000';// A corriger, j'ai mis un chiffre exubérent pour en pas être emmerd*
if(isset($_FILES['up_photo'])){
unset($erreur);
$extensions_ok = array('png', 'PNG', 'jpg', 'jpeg', 'JPEG', 'JPG');
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels).
// En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels,
// soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 50; // pour les miniatures
$Wmax = 300; // largeur maximale voulue (pour la photo d'origine)
$Hmax = 300; // hauteur maximale voulue ( pour la photo d'origine)
// Création des dossiers
if (!file_exists($dest_dossier)){
mkdir ($dest_dossier, 0777);
}
if (!file_exists($dest_dossier_mini)){
mkdir ($dest_dossier_mini, 0777);
}
// on compte d'abord le nombre d'image dans le répertoire
$num_images = count_files($dest_dossier);// Pas testé car je n'ai pas la fonction
//$num_images=5; <= pour le test
if ($num_images < 10){
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['up_photo']['tmp_name'])){
// si oui, on affiche un petit message d'erreur
$erreur[] = $txt0103;
}
else{
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier
//(je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['up_photo']['tmp_name']);
$W_Src = $tableau[0]; // largeur
$H_Src = $tableau[1]; // hauteur
if ($tableau == FALSE){
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['up_photo']['tmp_name']);
$erreur[] = $txt0104;
}
else{
// vérifications de l'extention
if( !in_array( substr(strrchr($_FILES['up_photo']['name'], '.'), 1), $extensions_ok ) ){
$erreur[] = $txt0105;
}
elseif( file_exists($_FILES['up_photo']['tmp_name'])
and filesize($_FILES['up_photo']['tmp_name']) > $max_size){
$erreur[] = $txt0106;
}
// on détremine la taille de la photo
$up_taille = $_FILES['up_photo']['size'];
$dest_fichier = basename($_FILES['up_photo']['name']);// cela donne le même résultat que la commande ==> $_FILES['up_photo']['name'];
// $extension = strrchr(strtolower($dest_fichier), '.');
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// on vérifie si le fichier n'est pas déjà présent :
$chemin_fic = $dest_dossier . $dest_fichier;
// Vérification de l'existence du fichier dans le répertoire et si besoin renommage du fichier
// $chemin_fic = Rename_fich($chemin_fic,$dest_fichier);
/*if (file_exists($chemin_fic))
{
$dest_fichier = 'DUP'.$dest_fichier;
echo 'dest_fichier = '.$dest_fichier;
}*/
// si l'image n'est ni un jpeg, ni un png, on supprime le fichier uploadé et on affiche le message d'erreur
if (!($tableau[2] == 2 || $tableau[2] == 3)){
unlink($_FILES['up_photo']['tmp_name']);
$erreur[] = $txt0107;
}
}
}
}
else{
$erreur[] = $txt0108;
}
// copie du fichier
if(!isset($erreur)){
// copie du fichier
if (move_uploaded_file($_FILES['up_photo']['tmp_name'], $dest_dossier .'/'. $dest_fichier)) {
// à ce moment on met le fichier sur le serveur
// A- LARGEUR ET HAUTEUR maxi fixes
if ($Wmax != 0 && $Hmax != 0) {
$ratiox = $W_Src / $Wmax; // ratio en largeur
$ratioy = $H_Src / $Hmax; // ratio en hauteur
$ratiobis = max($ratiox,$ratioy); // le plus grand
$W = $W_Src/$ratiobis;
$H = $H_Src/$ratiobis;
$condition = ($W_Src>$W) || ($H_Src>$H); // 1 si vrai (true)
}
// Creation de l'image miniature
$jpeg = false;
$png = false;
// si notre image est de type jpeg
if ($tableau[2] == 2){
$jpeg = true;
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dest_dossier.'/'.$dest_fichier);
// $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
// $Ress_Dst = ImageCreateTrueColor($W,$H);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1]){
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
if ($condition == 1) {
// $im_gd = imagecreatetruecolor(round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis);
// imagecopyresampled($im_gd, $src, 0, 0, 0, 0, round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis, $tableau[0], $tableau[1]);}
$im_gd = imagecreatetruecolor($W,$H);
// ImageCopyResampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);
ImageCopyResampled($im_gd, $src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);}
}
else{
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
if ($condition == 1) {
$im_gd = imagecreatetruecolor($W,$H);
// imagecopyresampled($im_gd, $src, 0, 0, 0, 0, $ratiobis, round($tableau[1]*($ratiobis/$tableau[0])), $tableau[0], $tableau[1]);}
ImageCopyResampled($im_gd, $src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);}
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dest_dossier_mini.'/'.$dest_fichier);
if ($condition == 1) {
imagejpeg ($im_gd, $dest_dossier.'/'.$dest_fichier);}
}
if ($tableau[2] == 3){
$png = false;
$src = imagecreatefrompng($dest_dossier.'/'.$dest_fichier);
if ($tableau[0] > $tableau[1]){
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else{
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
imagepng ($im, $dest_dossier_mini.'/'.$dest_fichier);
}
// on se connecte à MySQL
/**************** Partie non testée *************/
include ('connect.php');
// on détermine d'abord l'id_log
$sqla = sprintf("SELECT id_log FROM flatforswap_logement WHERE id_adh='".$_SESSION['id_adh']."'");
$reqa = mysql_query($sqla) or die('Erreur SQL : <br />'.$sqla);
$dataa = mysql_fetch_assoc($reqa);
$id_log = $dataa['id_log'];
// on peut maintenant insérer les données da ns la table photo
$date = date("Y-m-d");
$sqlb = sprintf("insert into flatforswap_photo(id_log,up_nom,up_titre,up_taille,up_date) values(%s, %s, %s, %s, %s)", quote_smart($id_log), quote_smart($dest_fichier), quote_smart($_POST["up_titre"]), quote_smart($up_taille), quote_smart($date));
$reqb = mysql_query($sqlb) or die('Erreur SQL : <br />'.$sqlb);
/**************** Fin de partie non testée *************/
// on peut renommer le fichier
if($jpeg){
$ext = '.jpeg';}
else{
$ext = '.png';}
/**************** Partie non testée *************/
rename($dest_dossier.'/'.$dest_fichier, $dest_dossier.'/'.mysql_insert_id().$ext);
rename($dest_dossier_mini.'/'.$dest_fichier, $dest_dossier_mini.'/'.mysql_insert_id().$ext);
$sqlc = sprintf("update flatforswap_photo set up_nom=%s where id_pho=%s", quote_smart(mysql_insert_id().$ext), quote_smart(mysql_insert_id()));
$reqc = mysql_query($sqlc) or die('Erreur SQL : <br />'.$sqlc);
/**************** Fin de partie non testée *************/
}
}
}
?>
salut,
j'ai testé (et un peu corrigé) ton code.
Je n'ai pas testé la partie MySQL.
Les images png et jpg sont bien récupérées et retaillées.
il y avait des erreurs au niveau des nom de fichier (pas de cohérence entre le code png et jpg).
Comme l'indique stealth35, il y a beaucoup de chose à faire pour éviter les soucis (par exemple tester le type mime plutôt que l'extension pour être "certain" qu'il s'agisse d'une image et pas d'un fichier php qui à été renommé (ou quoi que soit d'autre).
plus d'info => [url]http://www.phpfrance.com/tutoriaux/index.php/2005/04/26/30-lupload-de-fichiers[/url]
@+
[php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>test</title>
<meta name="description" content="test"/>
<meta name="keywords" content="test"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<META NAME="revisit-after" CONTENT="7 day">
<META NAME="Robots" CONTENT="all">
<META NAME="language" CONTENT="FR">
<link rel="stylesheet" media="screen" type="text/css" title="Design sombre" href="styles\styles.css" />
</head>
<!--commentaire-->
<body>
<form method="POST" action="" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<fieldset>
<legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="up_photo">Photo :</label><input type="file" name="up_photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</fieldset>
</form>
</body>
</html
<?php
/* Ajout des 3 lignes ci dessous que l'on avait pas*/
$dest_dossier ='imagestest';
$dest_fichier = 'final';
$dest_dossier_mini = 'imagesmini';
$max_size='1000000000';// A corriger, j'ai mis un chiffre exubérent pour en pas être emmerd*
if(isset($_FILES['up_photo'])){
unset($erreur);
$extensions_ok = array('png', 'PNG', 'jpg', 'jpeg', 'JPEG', 'JPG');
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels).
// En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels,
// soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 50; // pour les miniatures
$Wmax = 300; // largeur maximale voulue (pour la photo d'origine)
$Hmax = 300; // hauteur maximale voulue ( pour la photo d'origine)
// Création des dossiers
if (!file_exists($dest_dossier)){
mkdir ($dest_dossier, 0777);
}
if (!file_exists($dest_dossier_mini)){
mkdir ($dest_dossier_mini, 0777);
}
// on compte d'abord le nombre d'image dans le répertoire
$num_images = count_files($dest_dossier);// Pas testé car je n'ai pas la fonction
//$num_images=5; <= pour le test
if ($num_images < 10){
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['up_photo']['tmp_name'])){
// si oui, on affiche un petit message d'erreur
$erreur[] = $txt0103;
}
else{
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier
//(je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['up_photo']['tmp_name']);
$W_Src = $tableau[0]; // largeur
$H_Src = $tableau[1]; // hauteur
if ($tableau == FALSE){
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['up_photo']['tmp_name']);
$erreur[] = $txt0104;
}
else{
// vérifications de l'extention
if( !in_array( substr(strrchr($_FILES['up_photo']['name'], '.'), 1), $extensions_ok ) ){
$erreur[] = $txt0105;
}
elseif( file_exists($_FILES['up_photo']['tmp_name'])
and filesize($_FILES['up_photo']['tmp_name']) > $max_size){
$erreur[] = $txt0106;
}
// on détremine la taille de la photo
$up_taille = $_FILES['up_photo']['size'];
$dest_fichier = basename($_FILES['up_photo']['name']);// cela donne le même résultat que la commande ==> $_FILES['up_photo']['name'];
// $extension = strrchr(strtolower($dest_fichier), '.');
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// on vérifie si le fichier n'est pas déjà présent :
$chemin_fic = $dest_dossier . $dest_fichier;
// Vérification de l'existence du fichier dans le répertoire et si besoin renommage du fichier
// $chemin_fic = Rename_fich($chemin_fic,$dest_fichier);
/*if (file_exists($chemin_fic))
{
$dest_fichier = 'DUP'.$dest_fichier;
echo 'dest_fichier = '.$dest_fichier;
}*/
// si l'image n'est ni un jpeg, ni un png, on supprime le fichier uploadé et on affiche le message d'erreur
if (!($tableau[2] == 2 || $tableau[2] == 3)){
unlink($_FILES['up_photo']['tmp_name']);
$erreur[] = $txt0107;
}
}
}
}
else{
$erreur[] = $txt0108;
}
// copie du fichier
if(!isset($erreur)){
// copie du fichier
if (move_uploaded_file($_FILES['up_photo']['tmp_name'], $dest_dossier .'/'. $dest_fichier)) {
// à ce moment on met le fichier sur le serveur
// A- LARGEUR ET HAUTEUR maxi fixes
if ($Wmax != 0 && $Hmax != 0) {
$ratiox = $W_Src / $Wmax; // ratio en largeur
$ratioy = $H_Src / $Hmax; // ratio en hauteur
$ratiobis = max($ratiox,$ratioy); // le plus grand
$W = $W_Src/$ratiobis;
$H = $H_Src/$ratiobis;
$condition = ($W_Src>$W) || ($H_Src>$H); // 1 si vrai (true)
}
// Creation de l'image miniature
$jpeg = false;
$png = false;
// si notre image est de type jpeg
if ($tableau[2] == 2){
$jpeg = true;
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dest_dossier.'/'.$dest_fichier);
// $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
// $Ress_Dst = ImageCreateTrueColor($W,$H);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1]){
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
if ($condition == 1) {
// $im_gd = imagecreatetruecolor(round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis);
// imagecopyresampled($im_gd, $src, 0, 0, 0, 0, round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis, $tableau[0], $tableau[1]);}
$im_gd = imagecreatetruecolor($W,$H);
// ImageCopyResampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);
ImageCopyResampled($im_gd, $src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);}
}
else{
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
if ($condition == 1) {
$im_gd = imagecreatetruecolor($W,$H);
// imagecopyresampled($im_gd, $src, 0, 0, 0, 0, $ratiobis, round($tableau[1]*($ratiobis/$tableau[0])), $tableau[0], $tableau[1]);}
ImageCopyResampled($im_gd, $src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);}
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dest_dossier_mini.'/'.$dest_fichier);
if ($condition == 1) {
imagejpeg ($im_gd, $dest_dossier.'/'.$dest_fichier);}
}
if ($tableau[2] == 3){
$png = false;
$src = imagecreatefrompng($dest_dossier.'/'.$dest_fichier);
if ($tableau[0] > $tableau[1]){
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else{
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
imagepng ($im, $dest_dossier_mini.'/'.$dest_fichier);
}
// on se connecte à MySQL
/**************** Partie non testée *************/
include ('connect.php');
// on détermine d'abord l'id_log
$sqla = sprintf("SELECT id_log FROM flatforswap_logement WHERE id_adh='".$_SESSION['id_adh']."'");
$reqa = mysql_query($sqla) or die('Erreur SQL : <br />'.$sqla);
$dataa = mysql_fetch_assoc($reqa);
$id_log = $dataa['id_log'];
// on peut maintenant insérer les données da ns la table photo
$date = date("Y-m-d");
$sqlb = sprintf("insert into flatforswap_photo(id_log,up_nom,up_titre,up_taille,up_date) values(%s, %s, %s, %s, %s)", quote_smart($id_log), quote_smart($dest_fichier), quote_smart($_POST["up_titre"]), quote_smart($up_taille), quote_smart($date));
$reqb = mysql_query($sqlb) or die('Erreur SQL : <br />'.$sqlb);
/**************** Fin de partie non testée *************/
// on peut renommer le fichier
if($jpeg){
$ext = '.jpeg';}
else{
$ext = '.png';}
/**************** Partie non testée *************/
rename($dest_dossier.'/'.$dest_fichier, $dest_dossier.'/'.mysql_insert_id().$ext);
rename($dest_dossier_mini.'/'.$dest_fichier, $dest_dossier_mini.'/'.mysql_insert_id().$ext);
$sqlc = sprintf("update flatforswap_photo set up_nom=%s where id_pho=%s", quote_smart(mysql_insert_id().$ext), quote_smart(mysql_insert_id()));
$reqc = mysql_query($sqlc) or die('Erreur SQL : <br />'.$sqlc);
/**************** Fin de partie non testée *************/
}
}
}
?>[/php]