Page 1 sur 1

pas assez de mémoire pour une miniature avec SWFupload

Posté : 13 nov. 2011, 17:08
par wwwbillgates
Bonjour, jutilise SWFupload avec une création de miniature pour l'upload d'images. Le plugin fonctionne bien hormis lorsque j'upload une image d'environ 1.5MO car il n'est plus capable de créer la miniature et fait une erreur :
Fatal error: Out of memory (allocated 30670848) (tried to allocate 13056 bytes) in /homepages/1/d191383484/htdocs/cadeauxplaisir/templates/pages/etape1_description_upload.php on line 119

Alors j'ai bien essayé d'augmenter la mémoire de mon php.ini mais chez 1&1 elle est limité à 32MO donc je vais surement devoir trouver un autre moyen mais je ne sais pas du tout dans quelle direction aller pouvez-vous m'orienter svp ?

Mon code d'upload si jamais ya besoin...
<?php
//Permet l'échange de sessions
	if (isset($_POST["PHPSESSID"])) { session_id($_POST["PHPSESSID"]); }
	else if (isset($_GET["PHPSESSID"])) { session_id($_GET["PHPSESSID"]); }

	session_start();


	
	
	
	
	
	
//Vérifie la poids maximum de la photo
	$POST_MAX_SIZE = ini_get('post_max_size');
	$unit = strtoupper(substr($POST_MAX_SIZE, -1));
	$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));

	if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
		header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload
		echo "POST exceeded maximum allowed size.";
		exit(0);
	}

//Configuration
	$dossier_photo = "../../photos/";
	$upload = "Filedata";
	$poids_maxi = 5000000;		//5 Mo
	$extension_valide = array("jpg", "jpeg", "gif", "png", "bmp");
	
//Autres variables	
	$MAX_FILENAME_LENGTH = 260;
	$nom_photo_renomme = "";
	$file_extension = "";
	$uploadErrors = array(
        0=>"There is no error, the file uploaded with success",
        1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",
        2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
        3=>"The uploaded file was only partially uploaded",
        4=>"No file was uploaded",
        6=>"Missing a temporary folder"
	);


//Validation de l'upload
	if (!isset($_FILES[$upload])) {
		HandleError("No upload found in \$_FILES for " . $upload);
		exit(0);
	} else if (isset($_FILES[$upload]["error"]) && $_FILES[$upload]["error"] != 0) {
		HandleError($uploadErrors[$_FILES[$upload]["error"]]);
		exit(0);
	} else if (!isset($_FILES[$upload]["tmp_name"]) || !@is_uploaded_file($_FILES[$upload]["tmp_name"])) {
		HandleError("Upload failed is_uploaded_file test.");
		exit(0);
	} else if (!isset($_FILES[$upload]['name'])) {
		HandleError("File has no name.");
		exit(0);
	}
	
	
	
	
	
	
	
	
	
	
	
//Validation du poids du fichier
	$poids_photo = @filesize($_FILES[$upload]["tmp_name"]);
	if (!$poids_photo || $poids_photo > $poids_maxi) {
		HandleError("Votre photo est trop volumineuse, merci d'en réduire le poids.");
		exit(0);
	}
	
	if ($poids_photo <= 0) {
		HandleError("File size outside allowed lower bound");
		exit(0);
	}



	
//Renomme le fichier pour éviter les conflits avec un nom identique
	$nom_photo_renomme = md5(uniqid(rand(), true)); // uniquid() Génère un identifiant unique basé sur la date et heure courante en microsecondes.
	$extension_photo = strtolower(strrchr($_FILES[$upload]['name'], '.')); //strrchr renvoie l'extension avec le point // strtolower met l'extension en minuscule
	$nom_photo_renomme_avec_extension = $nom_photo_renomme . $extension_photo;	
	
	$targetFile =  str_replace('//','/',$dossier_photo) . $nom_photo_renomme_avec_extension;	

// Validate that we won't over-write an existing file
	if (file_exists($dossier_photo . $nom_photo_renomme)) {
		HandleError("Nom de photo déjà existante, merci de renommer votre photographie.");
		exit(0);
	}

// Validate file extension
	$path_info = pathinfo($_FILES[$upload]['name']);
	$file_extension = $path_info["extension"];
	$is_valid_extension = false;
	foreach ($extension_valide as $extension) {
		if (strcasecmp($file_extension, $extension) == 0) {
			$is_valid_extension = true;
			break;
		}
	}
	if (!$is_valid_extension) {
		HandleError("Les fichiers avec cette extension ne sont pas autorisés.");
		exit(0);
	}




//////////////DEBUT THUMB///////////////
	// Get the image and create a thumbnail
	$img = imagecreatefromjpeg($_FILES["Filedata"]["tmp_name"]);
	if (!$img) {
		echo "ERROR:could not create image handle ". $_FILES["Filedata"]["tmp_name"];
		exit(0);
	}

	$width = imageSX($img);
	$height = imageSY($img);

	if (!$width || !$height) {
		echo "ERROR:Invalid width or height";
		exit(0);
	}

	// Build the thumbnail
	$target_width = 100;
	$target_height = 100;
	$target_ratio = $target_width / $target_height;

	$img_ratio = $width / $height;

	if ($target_ratio > $img_ratio) {
		$new_height = $target_height;
		$new_width = $img_ratio * $target_height;
	} else {
		$new_height = $target_width / $img_ratio;
		$new_width = $target_width;
	}

	if ($new_height > $target_height) {
		$new_height = $target_height;
	}
	if ($new_width > $target_width) {
		$new_height = $target_width;
	}

	$new_img = ImageCreateTrueColor(100, 100);
	if (!@imagefilledrectangle($new_img, 0, 0, $target_width-1, $target_height-1, 0)) {	// Fill the image black
		echo "ERROR:Could not fill new image";
		exit(0);
	}

	if (!@imagecopyresampled($new_img, $img, ($target_width-$new_width)/2, ($target_height-$new_height)/2, 0, 0, $new_width, $new_height, $width, $height)) {
		echo "ERROR:Could not resize image";
		exit(0);
	}

	if (!isset($_SESSION["file_info"])) {
		$_SESSION["file_info"] = array();
	}

	// Use a output buffering to load the image into a variable
	ob_start();
	imagejpeg($new_img);
	$imagevariable = ob_get_contents();
	ob_end_clean();

	$file_id = md5($_FILES["Filedata"]["tmp_name"] + rand()*100000);
	
	$_SESSION["file_info"][$file_id] = $imagevariable;

	echo "FILEID:" . $file_id;	// Return the file id to the script
//////////////FIN THUMB///////////////




//Création de la session photo
$array_photo = explode('_', $_POST["photo"]);
$_SESSION['temp']['photo']['perso' . $array_photo[0]]['photo' . $array_photo[1]] = $nom_photo_renomme_avec_extension;







	if (!@move_uploaded_file($_FILES[$upload]["tmp_name"], $targetFile)) {
		HandleError("Le chargement de votre photo a échoué, merci de renouveler son chargement et si vous n'y parvenez pas, cliquer sur la case destinée à cet effet.");
		exit(0);
	}

	exit(0);


/* Handles the error output. This error message will be sent to the uploadSuccess event handler.  The event handler
will have to check for any error messages and react as needed. */
function HandleError($message) {
	echo $message;
}
?>

Re: pas assez de mémoire pour une miniature avec SWFupload

Posté : 14 nov. 2011, 00:05
par Aureusms
Je ne pense pas qu'il y ai grand choses à faire d'autres que d'obliger les images < 1.5Mo.