8725 sujets

Développement web côté serveur, CMS

Pages :
message réédité... question de lisibilité et de mise à jour des pb Smiley confused

Bonsoir à tous !

Je me suis inscrite sur le forum ce soir...
Grande débutante en programmation web, je cherche à faire quelque chose de trop complexe pour moi et j'espère que vous pourrez m'aider.

Pour faire court, je réalise pour une amie un pti site de partage de fichiers afin que nous puissions nous transmettre les photos de son mariage. Je suis contente, il est presque terminé. Smiley smile ...presque. Smiley decu

Sur mon mini-site donc, on peut uploader nos images.
Chaque image est rangée dans le dossier de son propriétaire.
Chaque dossier comporte 4 sous-dossiers : minia, miniatures, orig et downlads.
A chaque upload de fichiers, l'image est enregistrée dans le dossier du proprio de la photo (orig) et 3 nouvelles images sont créées : une vignette de taille moyenne (rangée dans miniatures), une toute petite miniature (rangée dans minia), et une image avec un copyright (watermark), (rangée dans downloads).
Tous les dossiers sont dans un "Super dossier", UploadedFiles.

J'ai besoin de créer une watermark sur chaque image et j'ai trouvé sur le web un exemple très bien expliqué, que j'ai du modifier pour le faire fonctionner directement à l'upload.

Il fabrique bien des images watermarkées des originaux uploadés s'il s'agit de jpeg, par contre ça ne fonctionne pas pour les png ou les gif.

Voici mon fichier

if (isset($fileProprio) && !empty($fileProprio))
{
	// SI QQCH DS ENVOI
	if (isset($fileName) && !empty($fileName))
	{
		// NOM DE FICHIER == $file
		$file=$fileName;
		/*
			WATERMARK_TYPE
				Type de watermark         
				Valeurs: 'text' | 'image'

			WATERMARK_ALIGN_H
				Alignment horizontal         
				Valeurs: 'left' | 'right' | 'center'

			WATERMARK_ALIGN_V
				Alignment vertical        
				Valeurs: 'top' | 'bottom' | 'center'
				
			WATERMARK_MARGIN
				Excentrage à partir du bord.
				Valeurs: (en pixels)
		*/
			define('WATERMARK_TYPE', 'text'); 
			define('WATERMARK_ALIGN_H', 'right'); 
			define('WATERMARK_ALIGN_V', 'bottom'); 
			define('WATERMARK_MARGIN', '5'); 

		/*
			WATERMARK_IMAGE_FILE
				Chemin vers le fichier image employé comme watermark
				Valeur possible (chemin absolu ou relatif).
			WATERMARK_OPACITY
				Opacité de l'image.
				Valeurs: entre 0 et 100
		*/
			define('WATERMARK_IMAGE_FILE', './wtmk.png');
			define('WATERMARK_OPACITY', '60'); 

		/*
			DOSSIER COURANT
				-> pour définir le nom de la watermark
				NB : split() découpe une lien_ige en un tableau de mots
				-> pour afficher le contenu d'un array : var_dump(pathinfo($_SERVER['SCRIPT_FILENAME']));
		*/
			$wtmk_temp = 'Copyright '.$fileProprio.', 03/2011, tous droits réservés. ';
		/*
		/*
			WATERMARK_TEXT
				Texte utilisé pour le copyright.
			WATERMARK_TEXT_FONT
				La police.
				Valeurs: de 1 à 5
			WATERMARK_TEXT_SHADOW
				Police "black shadow".
				Valeurs: 'yes' | 'no'
			WATERMARK_TEXT_COLOR
				La couleur de la police
				Valeurs en décimal (ex: '255,255,255') ou  hexadécimal (ex: '#ff4567')
		*/
			define('WATERMARK_TEXT', $wtmk_temp); 
			define('WATERMARK_TEXT_FONT', '2'); 
			define('WATERMARK_TEXT_SHADOW', 'yes'); 
			define('WATERMARK_TEXT_COLOR', '#FFFFFF'); 			
		// FIN DE LA CONFIGURATION
			$original_image_file = $_SERVER['DOCUMENT_ROOT'].'Maroc/UploadedFiles/'.$fileProprio.'/orig/'.$file;
			$original_image_info = getimagesize($original_image_file);
			if ($original_image_info) {
				$original_image_width = $original_image_info[0];//largeur
				$original_image_height = $original_image_info[1];//hauteur
				$original_image_imagetype = $original_image_info[2];//type de l'image
				$original_image_mime_type = $original_image_info['mime'];//type mime
			}
			else {
				header("Status: 500 Internal Server Error");
				if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
					header("Content-Type: text/plain");
					echo "WaterMark: Erreur lors de la lecture des propriétés des images de la galerie.";
					echo "Une ou plusieurs images sont tronquées par une signature d'entête.\n";
				}
				exit;
			}
			if ($original_image_imagetype == IMAGETYPE_GIF) {
				header("Content-Type: " . $original_image_mime_type);
				$source_image = imagecreatefromgif($original_image_file);
				exit;
			} 
			elseif ($original_image_imagetype == IMAGETYPE_JPEG) {
				header("Content-Type: " . $original_image_mime_type);
				$source_image = imagecreatefromjpeg($original_image_file);
			} 
			elseif ($original_image_imagetype == IMAGETYPE_PNG) {
				header("Content-Type: " . $original_image_mime_type);
				$source_image = imagecreatefrompng($original_image_file);
			}
			else {
				header("Status: 500 Internal Server Error");
				if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
					header("Content-Type: text/plain");
					echo "WaterMark: Format d'image non supporté\n";
				}
				exit;
			}
			if (WATERMARK_TYPE == 'image' && WATERMARK_IMAGE_FILE != '' 
			&& file_exists(WATERMARK_IMAGE_FILE)) {
				$watermark_image_file = realpath(WATERMARK_IMAGE_FILE);
				$watermark_image_info = getimagesize($watermark_image_file);
				if ($original_image_info) {
					$watermark_image_width = $watermark_image_info[0];
					$watermark_image_height = $watermark_image_info[1];
					$watermark_image_imagetype = $watermark_image_info[2];
					$watermark_image_mime_type = $watermark_image_info['mime'];
				}
				else {
					header("Status: 500 Internal Server Error");
					if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
						header("Content-Type: text/plain");
						echo "WaterMark: Erreur lors de a lecture des propriétés de l'image à incruster.";
                        echo "L'image est tronquée par une signature d'entête.\n";
					}
					exit;
				}
				if ($original_image_imagetype == IMAGETYPE_GIF) {
					header("Content-Type: " . $original_image_mime_type);
					imagecreatefromgif($original_image_file);
					exit;
				} 
				elseif ($original_image_imagetype == IMAGETYPE_JPEG) {
					header("Content-Type: " . $original_image_mime_type);
					$source_image = imagecreatefromjpeg($original_image_file);
				} 
				elseif ($original_image_imagetype == IMAGETYPE_PNG) {
					header("Content-Type: " . $original_image_mime_type);
					$source_image = imagecreatefrompng($original_image_file);
				}
				else {
					header("Status: 500 Internal Server Error");
					if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
						header("Content-Type: text/plain");
						echo "WaterMark: Format d'image non supporté\n";
					}
					exit;
				}
				if ($watermark_image) {
					$watermark_y = WATERMARK_MARGIN;
					if (WATERMARK_ALIGN_V == 'top') {
						$watermark_y = WATERMARK_MARGIN;
					} 
					elseif (WATERMARK_ALIGN_V == 'bottom') {
						$watermark_y = $original_image_height - $watermark_image_height - WATERMARK_MARGIN;
					} 
					elseif (WATERMARK_ALIGN_V == 'center') {
						$watermark_y = (int)($original_image_height / 2 - $watermark_image_height / 2);
					}
					$watermark_x = WATERMARK_MARGIN;        
					if (WATERMARK_ALIGN_H == 'left') {
						$watermark_x = WATERMARK_MARGIN;
					} 
					elseif (WATERMARK_ALIGN_H == 'right') {
						$watermark_x = $original_image_width - $watermark_image_width - WATERMARK_MARGIN;
					} 
					elseif (WATERMARK_ALIGN_H == 'center') {
						$watermark_x = (int)($original_image_width / 2 - $watermark_image_width / 2);
					}
					imagecopymerge(
						$source_image, 
						$watermark_image, 
						$watermark_x, $watermark_y,
						0, 0, 
						$watermark_image_width, $watermark_image_height,
						WATERMARK_OPACITY
					);
					// Libération de la mémoire associée
					imagedestroy($watermark_image);	
				}
			}
			elseif (WATERMARK_TYPE == 'text' && WATERMARK_TEXT != '') {
				$color = WATERMARK_TEXT_COLOR;
				$red = hexdec(substr($color, 1, 2));
				$green = hexdec(substr($color, 3, 2));
				$blue = hexdec(substr($color, 5, 2));        
				$text_color = imagecolorallocate($source_image, $red, $green, $blue); 
				$shadow_color = imagecolorallocate($source_image, 0, 0, 0); 
				$text_height = imagefontheight(WATERMARK_TEXT_FONT);
				$text_width = strlen(WATERMARK_TEXT) * imagefontwidth(WATERMARK_TEXT_FONT);
				$watermark_y = WATERMARK_MARGIN;
				if (WATERMARK_ALIGN_V == 'top') {
					$watermark_y = WATERMARK_MARGIN;
				}
				elseif (WATERMARK_ALIGN_V == 'bottom') {
					$watermark_y = $original_image_height - $text_height - WATERMARK_MARGIN;
				}
				elseif (WATERMARK_ALIGN_V == 'center') {
					$watermark_y = (int)($original_image_height / 2 - $text_height / 2);
				  }
				$watermark_x = WATERMARK_MARGIN;
				if (WATERMARK_ALIGN_H == 'left') {
					$watermark_x = WATERMARK_MARGIN;
				}
				elseif (WATERMARK_ALIGN_H == 'right') {
					$watermark_x = $original_image_width - $text_width - WATERMARK_MARGIN;
				}
				elseif (WATERMARK_ALIGN_H == 'center') {
					$watermark_x = (int)($original_image_width / 2 - $text_width / 2);
				}
				if (WATERMARK_TEXT_SHADOW == 'yes') {
					imagestring(
						$source_image, 
						WATERMARK_TEXT_FONT, 
						$watermark_x + 1, $watermark_y + 1, 
						WATERMARK_TEXT, 
						$shadow_color
					);
				}
				imagestring(
					$source_image, 
					WATERMARK_TEXT_FONT, 
					$watermark_x, $watermark_y,
					WATERMARK_TEXT,
					$text_color
				);
			}
			else {
				header("Status: 500 Internal Server Error");
				if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
					header("Content-Type: text/plain");                
					echo "WaterMark: Erreur de configuration\n";
				}
				exit;
			}
			if ($original_image_imagetype == IMAGETYPE_JPEG) {
				imagejpeg($source_image,'UploadedFiles/'.$fileProprio.'/downloads/'.$file,100); //chemin de l'image watermarkée
			}
			elseif ($original_image_imagetype == IMAGETYPE_PNG) {
				imagepng($source_image,'UploadedFiles/'.$fileProprio.'/downloads/'.$file,100);//chemin de l'image watermarkée
			}
			elseif ($original_image_imagetype == IMAGETYPE_GIF) {
				imagegif($source_image,'UploadedFiles/'.$fileProprio.'/downloads/'.$file,100);//chemin de l'image watermarkée
			}
			// Libération de la mémoire associée
			imagedestroy($source_image);
	}
}


Ensuite je souhaiterais, au clic, forcer le téléchargement des images afin d'avoir immédiatement la possibilité de les enregistrer sur l'ordi, sans passer par le clic gauche... mais je n'y suis pas tout de suite...

J'espère qu'à la fin de cette page je ne vous ai pas tous perdu... Merci d'avance de votre aide et de votre temps.

Claire
Modifié par ClR (24 Apr 2011 - 18:25)
Modérateur
Bonjour Claire et bienvenue,

Je n'ai pas bien saisie ta problèmatique. Là en lisant ton code (vitesse F1) j'ai l'impression que l'image finale (grande) affichée aura bien l'extension jpeg ou png et qu'il y aura bien un texte supplémentaire ou une marque de fabrique. Tu voudrais qu'au clic de la souris, il y ait automatique la fonction 'enregistrer l'image sous...' au lieu d'un lien tout bête vers cette image agrandie et que l'utilisateur fasse un click droit 'enregistrer l'image sous...'. Si j'ai bien compris, tu souhaites raccourcir les étapes ?

J'entrevois en fait deux solutions annexes qui me parraissent plus "simples" à mettre en place.

La plus simple mais qui ne fait pas vraiment avancer le schmilblick :
Au clic de l'utilisateur, une modal/lightbox s'affiche et l'utilisateur fait son "enregistrer sous"

solution plus pratique :
Lorsque l'utilisateur affiche la galerie de miniatures, il y a une initialisation d'une session si besoin (cela dépend de la grandeur de ta galerie et du nombre d'images affichées par page).
Sous chaque image, il y a une checkbox. Lutilisateur coche chaque image qu'il désire.
Lorsqu'il appuie sur le bouton télécharger, toutes les images répertoriées dans la variable de session vont être traitées par le fichier watermark. Une fois fait, tu récupères ces dernières, tu zippes toutes ces images et tu les transmets à l'utilisateurs.

Espérant avoir fait avancer le schmilblick, bonne journée à toi
Bonjour ... et merci Smiley smile !

Ta réponse me rassure, j'avais un peu peur d'avoir effrayé tout le monde avec mon roman.

Mon problème en 2 mots c'est d'enregistrer (de télécharger) l'image en un clic avec la watermark, car ma watermark nécessite un affichage pour être créée. Enfin, je ne parviens pas à la créer sans ça... Smiley confus

Donc effectivement ce que je ne parviens pas à faire, c'est traiter, ne serait-ce qu'une seule photo par le fichier watermark si cette dernière ne passe pas par le biais de l'affichage.

et oui, ce serait une bonne idée une petite case à cocher... mais je m'y attarderait plus tard si déjà je parviens à le faire avec une seule image. Smiley cligne

je te remercie de ton aide en tous les cas.

NB: C'est à réfléchir ton idée de case à cocher, car ça pourrait me débarrasser d'un coup du problème (le second) des téléchargements forcés... Smiley rolleyes
Modérateur
ClR a écrit :
Bonjour ... et merci Smiley smile !

Ta réponse me rassure, j'avais un peu peur d'avoir effrayé tout le monde avec mon roman.

Mon problème en 2 mots c'est d'enregistrer (de télécharger) l'image en un clic avec la watermark, car ma watermark nécessite un affichage pour être créée. Enfin, je ne parviens pas à la créer sans ça... Smiley confus

Donc effectivement ce que je ne parviens pas à faire, c'est traiter, ne serait-ce qu'une seule photo par le fichier watermark si cette dernière ne passe pas par le biais de l'affichage.

et oui, ce serait une bonne idée une petite case à cocher... mais je m'y attarderait plus tard si déjà je parviens à le faire avec une seule image. Smiley cligne

je te remercie de ton aide en tous les cas.

NB: C'est à réfléchir ton idée de case à cocher, car ça pourrait me débarrasser d'un coup du problème (le second) des téléchargements forcés... Smiley rolleyes



Je n'ai pas essayé ton fichier watemark. Donc je ne sais pas s'il fonctionne (je ne vois pas le header et l'image destroy)... Cependant, pour que ce fichier traite l'image sans afficher, il te suffit de remplacer null par le nom que tu veux :

if ($original_image_imagetype == IMAGETYPE_JPEG) {  
        imagejpeg($source_image,null,100);  
    }  
Bonjour merci encore de tes pistes.
J'ai déserté le loisir pour le job et je ne lis qu'à l'instant ton message.

Alors...
Mon fichier de watermark fonctionne bien. m'enfin, il en a tout l'air... Smiley sweatdrop il n'y a pas d'erreur affichée et tout semble se faire correctement. Peut-être devrais-je rajouter un header... Disons que comme c'est juste du php, et que ça marche, ça ne m'a pas surprit qu'il n'y en ai pas ; j'ai même pensé qu'il n'était pas nécessaire.

je me documente sur ton lien, j'en fais de même avec l'image destroy, je fais qq tests et je viens faire le bilan ensuite.

Merci encore, à bientôt
Bonjour bonjour...

Je me suis arrachée les cheveux tout hier et je reviens avec moult questions (of course, rien ne marche):

J'essaye de mettre en place la solution (n°2... la "plus pratique" Smiley cligne ) proposée par Niuxe
(dans les grandes lignes) Niuxe a écrit :

Sous chaque image, une checkbox pour cocher les images souhaitées [...].
Lorsqu'1 utilisateur appuie sur le bouton télécharger, toutes les images répertoriées sont traitées par le fichier watermark.
Récupèration des images, zip et envoi.

Quelques nuances cependant :
A la place d'initialiser une session, j'envoie les données par formulaire.
Quand j'appuie sur mon bouton "Télécharger" ("Enregistrer" chez moi), mes infos sont envoyées à ma page download_ttt.php.
Ces infos sont bien récupérées, et triées : s'il s'agit d'une image, elle doit être "watermarkée", si c'est un autre type fichier (sans doute des vidéos et peut-être d'autres types de fichiers), non.
Fichier et images sont traités différemment, en revanche l'une comme l'autre doivent être en "téléchargement forcé".

D'où la création de ma page download_ttt.php.
En fait, cette page fait tout et contient dorénavant le code php de la page WaterMark.php (d'ailleurs c'est peut-être une érésie), qui n'est executé que s'il s'agit d'une image.

Comme me l'avait signalé Niuxe, il manquait l'image destroy() et le header de l'image.

Pour l'imagedestroy, il semble qu'il faille l'appeler à chaque imagecreate...().
Du coup j'en ai ajouté 2, un pour $watermark_image, et un pour $image_source, après que les deux variables aient été utilisées, genre :

// Libération de la mémoire associée
imagedestroy($source_image);

Pour le header de l'image créée, est ce qu'il n'est pas déclaré ici ?

if ($original_image_imagetype == IMAGETYPE_GIF) {
	header("Content-Type: " . $original_image_mime_type);
	readfile($original_image_file);
	exit;
} 
elseif ($original_image_imagetype == IMAGETYPE_JPEG) {
	header("Content-Type: " . $original_image_mime_type);
	$source_image = imagecreatefromjpeg($original_image_file);
} 
elseif ($original_image_imagetype == IMAGETYPE_PNG) {
	header("Content-Type: " . $original_image_mime_type);
	$source_image = imagecreatefrompng($original_image_file);
}
else {
	header("Status: 500 Internal Server Error");
	if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
	header("Content-Type: text/plain");
	echo "WaterMark: Format d'image non supporté\n";
	}
	exit;
}


Je précise en passant que j'ai toujours mon doc .htaccess à la racine de mon site et que je n'ai rien changé dedans... peut-être dois-je m'en débarasser ?

Et sinon pour mes téléchargements forcés (je n'y suis pas encore mais j'y pense), mon problème sera de ne pas savoir d'avance le type de fichier envoyé. Cependant à force de fouiller le web, j'ai trouvé un code qui me sera surement bien pratique par la suite je pense. Il me semble qu'il traite tous les types de fichiers (si je ne m'abuse ... Smiley confused ) Je le mets de côté donc...

 //Envoi du fichier
  ob_clean();
  flush();
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');// ? n'est ce pas comme le force-download deux lignes en dessous ??
  header('Content-Disposition: attachment; filename="' . $file . '"'); //nom de fichier
  header("Content-type: application/force-download" );//téléchargement forcé
  header('Content-Transfer-Encoding: binary');//données binaires
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Content-Length: ' . filesize($path . '/' . $file));//filesize(chemin & nom de fichier)
  readfile($path . '/' . $file); //chemin & nom de fichier

J'ai vu ça aussi, qui, même s'il semble très complexe, semble avoir l'avantage de traiter tous les cas...
http://fr.w3support.net/index.php?db=so&id=386845

Je me dis peut-être que zipper les données faciliteraient leur envoi au final... parceque du coup je n'enverrais qu'un seul format : zip. mais ça ne fonctionne peut-être pas comme ça. Smiley confus

Voilà où j'en suis. lorsque je clique sur mon bouton envoyé, sur l'écran s'affiche :
une image du texte suivant
http://localhost/Mariage/uploadedFiles/download_ttt.php

Smiley biggol Smiley biggol Smiley biggol

je ne sais pas bien quoi faire à vrai dire... Smiley decu
si ce n'est vous exposer mes problèmes et espérer que vous aurez peut-être une idée sur ce qui cloche...

Merci d'avance de votre temps
Modifié par ClR (16 Apr 2011 - 19:27)
Bonsoir !
oui, j'y avait bien pensé...mais mon pb alors était simplement de "parler" à mon fichier de watermark, que ce soit à l'up', ou au down'load.
J'ai suivit les conseils de niuxe du coup. Par contre cet aprèm j'ai tout recommencé et je me le refais plus "pas à pas"...
Tout n'est pas si stérile en fait. A force de recherches et de tentatives, d'abord j'y vois un peu plus clair, mais surtout... ça avance ! (doucement certes, mais je ne suis pas pressée) Smiley smile ...
je mange chez des amis alors je n'ai pas le temps de m'étendre (ce qui n'est pas plus mal au vue de la fâcheuse tendance... Smiley confused ).
J'avance mais je ne suis pas au bout de mes peines. J'y reviendrais ce soir et demain je pense je vous ferais le bilan.

Merci de votre aide précieuse et très bonne soirée à tous Smiley smile
Avis personnel : toujours essayer de faire au plus simple.

1. As-tu vraiment besoin d'un watermark pour partager des photos avec tes amis ?
2. Si oui, tu ajoutes le watermark à l'upload et on n'en parle plus (règles ce problème)
Modifié par jb_gfx (15 Apr 2011 - 22:48)
Modérateur
Si jamais tu décides d'ajouter le watermark à l'upload, conserve quand même l'originale au cas où tu voudrais changer le watermark.
Bonsoir...

J'ai deux amis photographes (très modestes) qui tiennent à cette petite griffe...(convaincus d'avoir sans doute quelques clichés valables du Sahara... non mais franchement... Pis entre nous, à part du sable... Smiley cligne )
Bref, donc oui, pour l'utilité.
Et oui, encore, pour finalement tenter la création de la watermark à l'upload, tout en conservant les originaux... pour simplifier en effet.
D'autant que, après quelques tests infructueux, ce que j'ai essayé ne fonctionne pas vraiment. Simplifions donc...

Merci de votre aide à tous en tous les cas, ça dynamise un peu ma galère, et ça m'aide à ramer. Smiley smile
bonne soirée
Salut salut.
L'heure du premier bilan a sonné...
Smiley lol J'ai finit par réussir, à l'upload, à enregistrer ma watermark. Sisi. Smiley lol
En fait je pense même que ça marchait depuis un moment... avec les images de type jpeg seulement... mouais, ça marche pas ni pour les png, ni pour les gif (et comme je faisais mes essais avec une image png... Smiley biggol ... à devenir chèvre. )

Bref, je vais rééditer le message où je vous donnais le code de la watermark, avec les modifs apportées, peut-être saurez-vous où ça coince, je ne cerne pas mon erreur de création des images .gif et .png...

Merci à jbfx pour avoir insisté un peu sur le "watermarkage" en dur de mes images à l'upload... Smiley jap
a écrit :
Avis personnel : toujours essayer de faire au plus simple.


Ensuite pour l'idée du zip puis de l'envoi, j'ai trouvé l'idée plutôt maligne car elle permet de se passer des header multiples lors des envois.
Suivant les conseils de niuxe, j'ai mit une checkbox à chaque image et j'envoie le tout via un formulaire $_POST.
EDIT : tout est fonctionnel maintenant, si ce n'est que mon archive contient toute l'arborescence... C'est pas terrible et surtout pas pratique du tout... Un dossier simple avec tout en pagaille serait bien mieux. Smiley smile


$bilan_files_download='Aucune information renseignée sur l\'envoi.';
//ZIP
require( "lib/zip.lib.php" ) ; // librairie ZIP
						
// SI ENVOI 
if (isset($_POST['SubmitDownloadFiles']))
{
	if (isset($_POST['fileProprio']) && !empty($_POST['fileProprio']))
	{
		$fileProprio=$_POST['fileProprio'];
		$bilan_files_download='<h4>Fichiers downloadés dans le dossier de '.$fileProprio.'</h4><p>';
		// SI QQCH DS ENVOI
		if (isset($_POST['filePathName']) && !empty($_POST['filePathName']))
		{
			// NOM DE FICHIER == $file
			$file=$_POST['filePathName'];
			//BOUCLE images
			$iges_download='';
			$files_download='';
			
			// POUR CHAQUE FICHIER
			for ($i = 0, $c = count($file); $i < $c; $i++) 
			{
				if (file_exists('UploadedFiles/'.$fileProprio .'/orig/'. $file[$i]))
				{
					//chemin de dossier associé au fichier
					$dirName = 'UploadedFiles/'.$fileProprio.'/orig/'; 
					// extensions autorisées
					$ext_autorisees=array('jpg','jpeg','txt','zip','pdf','jpe','gif','png','doc','rtf','xls','docx','xlsx','mov','avi','wmv','wmva','mp4','html','php','JPG','JPEG','TXT','ZIP','PDF','JPE','GIF','PNG','DOC','RTF','XLS','DOCX','XLSX','MOV','AVI','WMV','WMVA','MP4','HTML','PHP'); 
					// SI FICHIER AUTORISE (VERIFIE EXTENSION)
					if (in_array(preg_replace("#(.+)\.(.+)#", "$2", $file[$i]), $ext_autorisees))
					{
						// extensions pour les photos 
						$ext_photo = array('jpg','jpeg','gif','png','JPG','JPEG','GIF','PNG'); 
						// SI PHOTO JPEG ou JPG 
						if (in_array(preg_replace("#(.+)\.(.+)#", "$2", $file[$i]), $ext_photo))
						{
							//chemin de dossier associé au fichier
							$dirName = 'UploadedFiles/'.$fileProprio.'/downloads/'; 
							//BILAN DE LA BOUCLE
							$iges_download.='- '.$file[$i].'<br/>';
						}
						// SINON FICHIER AUTRE (pas de copyright aposé)
						else
						{
							//BILAN DE LA BOUCLE
							$files_download.='- '.$file[$i].';<br/>';
						}
						$zip = new zipfile () ; //on crée une instance zip
						//TTT du fichier
						$file[$i]= $dirName.$file[$i];
						$fo = fopen($file[$i],'r') ; //on ouvre le fichier
						$contenu = fread($fo, filesize($file[$i])) ; //on enregistre le contenu
						fclose($fo) ; //on ferme fichier
						$zip->addfile($contenu, $file[$i]) ; //on ajoute le fichier
					}
					else
					{
						$bilan_files_download.='<span class="msg_erreur">Le format de fichier envoyé n\'est pas autorisé pour : '.$file[$i].'</span><br/>';
					}
					
				}
				else
				{
					$bilan_files_download.='<span class="msg_erreur">Le fichier : '.$file[$i].' n\'existe plus. Le téléchargement n\'a pas eut lieu.</span><br/>';
				}
			}
			// ZIP : TTT 
			if((isset($zip)) && !empty ($zip))
			{				
				$archive = $zip->file() ; // on associe l'archive

				// on enregistre l'archive dans un fichier
				header('Content-Type: application/x-zip') ; //on détermine les en-tête
				header('Content-Disposition: inline; filename=archive.zip') ;
				// ZIP : ENVOI
				echo $archive ;
			}
		}
		else
		{
			$bilan_files_download.='<span class="msg_erreur">Aucun fichier envoyé !</span><br/>';
		}
	}
	else
	{
		$bilan_files_download.='<span class="msg_erreur">Aucun propiétaire de fichiers renseigné !</span><br/>';
	}
}
// SINON
else
{
	$bilan_files_download.='<span class="msg_erreur">Aucun envoi !</span><br/>';
}
//FIN BOUCLE images
if (!empty($iges_download))
{
	//BOUCLE images
	$bilan_files_download.='<p>Photographies (avec copyright) downloadées : '.$iges_download.'</p>';
}
if (!empty($files_download))
{
	//BOUCLE images
	$bilan_files_download.='<p>Fichiers téléchargés : '.$files_download.'</p>';
			
}
// CSS : classe à redéfinir ou à imiter /à msg_ok ou msg_erreur
echo '<div class="msg_retour_download">'.$bilan_files_download.'</div>';


Si vous avez une idée, je suis preneuse, mais je continue mes recherches de mon côté. Voilou. merci encore et merci d'avance

EDIT : ben toujours pour les zip... je suis bien embêtée... il me fait bien des archives mon zip, mais d'un seul fichier !! Smiley whattha pfff...zut zut zut
Modifié par ClR (17 Apr 2011 - 05:49)
Bonsoir tout le monde...
Smiley smile (ça commence par un smile...c'est bon signe...)

Bon alors le zip fonctionne. Je m'y suis prise comme ça :

Dans mon formulaire, des cases à cocher, quand on clic sur "Télécharger", on envoie le traitement du formulaire, qui créera le zip :

// SI QQCH DS ENVOI
	if (isset($_POST['submit']) && !empty($_POST['files']))
	{
		//ZIP :  librairie ziplib de php
		require_once("lib/zip.lib.php" ) ; 
		$zip = new zipfile();//on crée une instance zip 
		// NOM DE FICHIER == $file
		$file=$_POST['files'];
		// POUR CHAQUE FICHIER
		for ($i = 0, $c = count($file); $i < $c; $i++) 
		{
			if (file_exists('UploadedFiles/'.$fileProprio .'/orig/'. $file[$i]))
			{
				//chemin de dossier associé au fichier
				$dirName = 'UploadedFiles/'.$fileProprio.'/orig/'; 
				// extensions autorisées
				$ext_autorisees=array('jpg','jpeg','txt','zip','pdf','jpe','gif','png','doc','rtf','xls','docx','xlsx','mov','avi','wmv','wmva','mp4','html','php','JPG','JPEG','TXT','ZIP','PDF','JPE','GIF','PNG','DOC','RTF','XLS','DOCX','XLSX','MOV','AVI','WMV','WMVA','MP4','HTML','PHP'); 
				// SI FICHIER AUTORISE (VERIFIE EXTENSION)
				if (in_array(preg_replace("#(.+)\.(.+)#", "$2", $file[$i]), $ext_autorisees))
				{
					// extensions pour les photos ********NB : voir les commentaires ensuite***********
					$ext_photo = array('jpg','jpeg','gif','png','JPG','JPEG','GIF','PNG'); 
					// SI PHOTO JPEG ou JPG ou GIF ou PNG
					if (in_array(preg_replace("#(.+)\.(.+)#", "$2", $file[$i]), $ext_photo))
					{
						//chemin de dossier associé au fichier
						$dirName = 'UploadedFiles/'.$fileProprio.'/downloads/'; 
					}
					//TTT du fichier 
					$value=$dirName.$file[$i];
					$zip -> addFile(implode("",file($value)),basename($value));
				}					
			}
		}
		header("content-type: application/zip");
		//header("Content-Disposition: inline; filename=selection.zip"); //force le téléchargement
		//variables pr nom de dossier zip
		$date=date("ydm-H\hi");
		header('Content-Disposition: attachment; filename=MariageMaroc-FichiersDe'.$fileProprio.'-'.$date.'.zip') ;//laisse le choix à l'utilisateur
		header("Content-Transfer-Encoding: binary");
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header("Expires: 0");
		flush();
		print $zip -> file();
		exit();
	}
}


Bon c'est un raccourcit (il n'y a pas mes messages d'erreur) mais ce n'est pas utile ici.
Petite question d'ailleurs au sujet des "messages d'erreurs" (qui sont plutôt des messages d'infos) pour le traitement de mon zip : Tout le long du traitement, je récupère des infos dans une variable (noms des fichiers téléchargés, erreurs rencontrées si un fichier n'existe plus...). Pourtant, lorsque mon zip s'éxécute, je ne parviens à récupérer aucune info de retour...

je fais un genre de if(!empty $infos_retour) echo $infos_retour; et si le zip s'est exécuté, cette variable ne devrait, après le traitement, pas être vide (elle devrait contenir au moins les noms de fichiers...). Je trouve ça très bizarre et mon code fonctionne pourtant correctement.
Savez-vous pourquoi ?
Bref, je suis déjà bien contente que ce soit fonctionnel. Smiley smile Smiley smile Smiley smile Smiley smile

J'ai fais une petite note en commentaire dans le code :
// extensions pour les photos ********NB : voir les commentaires ensuite***********
$ext_photo = array('jpg','jpeg','gif','png','JPG','JPEG','GIF','PNG'); 
// SI PHOTO JPEG ou JPG ou GIF ou PNG


En effet, mon fichier de watermark ne fonctionne pas pour les fichiers s'il ne s'agit pas de JPEG, donc, si je ne résouds pas ce problème, je pourrais traiter mon code différemment et ne copyrighter que les images de type jpeg...

// extensions pour les photos 
$ext_photo = array('jpg','jpeg','JPG','JPEG'); 
// SI PHOTO JPEG ou JPG...


Et puis il me semble, sans certitude, que la majorité des photos sont de ce type, non??
J'en sais trop rien, qu'en pensez-vous?

Si vous avez un avis sur ces dernières questions... comme toujours je suis tout ouïe ! Smiley smile
et puis je vous remercie très sincèrement de votre aide... d'autant que je ne suis pas bien douée...
Modifié par ClR (18 Apr 2011 - 01:01)
Les photos sont effectivement le plus souvent au format JPEG. Les utilisateurs ont peu de chances de t'envoyer du PNG ou du GIF.

Juste un truc, quand je regarde ton code : tu te bases sur le nom du fichier pour déterminer son format (d'après l'extension). Cela pose plusieurs problèmes :

- Au niveau de la sécurité : l'utilisateur peut très bien changer le l'extension du fichier et tenter d'exploiter ton script pour le détourner de son fonctionnement initial.
- L'extension n'est pas obligatoire. Certains logiciels sous Linux ou Mac n'ajoutent pas d'extension au fichier (l'extension est à la base une particularité de Windows).

Pour déterminer si un fichier est dans le bon format tu devrais te baser sur son type mime. Quand tu télécharges un fichier via un formulaire, le type mime est disponible dans le tableau $_FILES, dans l'index "type" :


$_FILES['mon_champ']['type']


Pour le format JPEG cela correspond à 3 types :


if ($_FILES['mon_champ']['type'] == 'image/jpeg'
|| $_FILES['mon_champ']['type'] == 'image/jpeg') 
|| $_FILES['mon_champ']['type'] == 'image/pjpeg')

Modifié par jb_gfx (18 Apr 2011 - 20:18)
Bonjour jb_gfx et merci de tes précisions.
en effet, pas très sécurisé mon bidule. Je vais remédier au pb de suite.
(et pourquoi préciser 2 types s'ils sont identiques (jpeg? pour jpg et jpeg))

Pour les soucis précédents je décide donc d'opter pour le jpeg seulement.
Pb résolu (ou presque*) alors merci sincèrement à tous.

et je mettrais en résolu dès que j'aurais réussit mon traitement en me basant sur le type mime...

bon week-end à tous

*... toujours la question de mes messages d'erreur qui ne s'affichent pas mais bon...je me dis que ce n'est pas bien grave... c'était surtout de la curiosité. Il me semble que la page ne se charge pas vraiment... ou "oublie tout" au moment du zip...
Modifié par ClR (24 Apr 2011 - 05:58)
ClR a écrit :

(et pourquoi préciser 2 types s'ils sont identiques (jpeg? pour jpg et jpeg))


Oups, erreur de saisie, le premier devrait être jpg. Donc jpg, jpeg et pjpeg (pjpeg c'est débile mais c'est pour IE Smiley langue ).
Bjr bjr
Bon alors...pb de type mime du coup.
Je tarde à répondre car je galère un peu.
J'essaie de sécuriser mes uploads et download. Je cherche pas mal car j'ai beaucoup de type de fichiers à prendre en compte (sans compter les photos).
Mais concentrons nous sur les photos tout d'abord.
J'ai lu hier soir que pour les images de type jpeg et jpg, le type mime était identique, soit images/jpeg. pjpeg je ne l'ai pas croisé, mais je me dis que ça devrait être pareil...
Qu'en penses-tu ?
Re...

bon alors après réflexion et aussi parce que je n'arrive pas à trouver suffisamment d'info à ce sujet, je vais en rester là. Je traite juste le mime type pour les jpeg, et le reste...ben je vais espérer que les gens qui utiliserons ce micro site de partage de fichiers n'en fasse pas n'imp', et ne tentent pas de le détruire. Et puis si tel est le cas ben... je le fermerais.

Je remercie donc une dernière fois tout le monde de m'avoir bien aidé.
je vais tenter ce soir et demain (je bosse pas) de le mettre en ligne et puis je verrais bien.

Ayé, j'vous embête plus Smiley smile
sujet résolu !!
Modifié par ClR (24 Apr 2011 - 18:26)
Modérateur
Bonjour,

jb_gfx a écrit :

Juste un truc, quand je regarde ton code : tu te bases sur le nom du fichier pour déterminer son format (d'après l'extension). Cela pose plusieurs problèmes :

- Au niveau de la sécurité : l'utilisateur peut très bien changer le l'extension du fichier et tenter d'exploiter ton script pour le détourner de son fonctionnement initial.

...

Pour déterminer si un fichier est dans le bon format tu devrais te baser sur son type mime.


C'est pareil pour le mimetype. Comme c'est le navigateur Web qui transmet le mimetype du fichier, il peut être falsifié.

Je vais revenir un peu plus tard pour donner la procédure pour sécuriser au maximum l'upload de fichiers.
Modifié par Tony Monast (26 Apr 2011 - 23:23)
Pages :