echantillionage photo

ViPHP
AB
ViPHP | 5818 Messages

19 avr. 2010, 03:01

Non non faut pas mettre le chemin complet dans ta base de donnée, car il va changer quand ce sera sur un serveur distant ou si tu change le nom de domaine par exemple. Mets uniquement le répertoire et le nom de l'image par exemple pics/IMG_0015.
Et encore le répertoire n'est pas indispensable puisqu'on peut le définir à la lecture. Par contre ce serait plus souple de laisser l'extension de l'image en bdd.

ViPHP
AB
ViPHP | 5818 Messages

19 avr. 2010, 03:12

Sinon concernant la condition, si tu veux faire l'enregistrement en bdd si la miniature est créée tu peux faire
// A la place de imagejpeg  ($im, $dir_mini.'/'.$file_upload);
$test = imagejpeg  ($im, $dir_mini.'/'.$file_upload);

//Suite du code

if($test)
{
//requête d'insertion
}
Simplement parce que imagejpeg renvoie true en cas de succès sinon flase (comme l'indique le manuel).

Mais surtout n'oublies pas mon précédent message :wink:

Eléphant du PHP | 388 Messages

19 avr. 2010, 18:01

donc cela fonctionne avec se script
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

//taille des miniature
$ratio = 90;

//recuperation du post du formulaire
if (isset($_POST['ok'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		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['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}

	
		else {
		

		
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille 				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD 					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// 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]);
					}
					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]);
					}
 // on copie notre fichier généré dans le répertoire des miniatures 					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				
			
				}
mais le problème là j'utilise cela
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

le HIC si je le précente comme cela
$dir = "/pics";
$dir_mini = "/mini";

j'obtient se message

Warning: copy(/pics/IMG_0013.jpg) [function.copy]: failed to open stream: No such file or directory in /homez.316/logisdesq/www/php/mcpvalidationannonceparticulier.php on line 64

Warning: imagecreatefromjpeg(/pics/IMG_0013.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /homez.316/logisdesq/www/php/mcpvalidationannonceparticulier.php on line 68

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /homez.316/logisdesq/www/php/mcpvalidationannonceparticulier.php on line 72

Warning: imagejpeg() [function.imagejpeg]: Unable to open '/mini/IMG_0013.jpg' for writing in /homez.316/logisdesq/www/php/mcpvalidationannonceparticulier.php on line 79

j'ai essayé plusieurs chose mais rien ne passe que en faisant
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";

Puis j'ai voulu placé cela

Code : Tout sélectionner

if (file_exists($dir . $_FILES['mon_image']['name'])) { echo 'Le nom de votre photo éxiste déjà merci de la renommer'; }
Afin de faire un controle de doublons mais sa passe pas je ne voit pas ou je peut le placer

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2010, 02:28

Ben oui tu dois avoir une variable spécifique pour le chemin qui indique les répertoires et une autre pour indiquer le nom de l'image (ou image + répertoire) qui sera enregistrée en bdd...