Optimisation de code / Fatal error: Allowed memory size
Posté : 21 mars 2009, 19:05
Bonjour.
Voilà, je me bat avec un code PHP que j'ai écris avec l'aide de plusieurs exemple sur le net, qui permet de réceptionner 1 ou plusieurs images d'un fichier flash pour ensuite les fusionner en une seule.
Mes connaissances en PHP ne vont pas très loin et lors de l'exécution du script, pour une image de grande taille découpé en 4 parties, j'ai l'erreur suivante :
Il y a beaucoup de chose qui se répète mais je ne vois pas trop comment éviter ces répétition justement...
Voilà le code PHP :
D'avance merci.
Voilà, je me bat avec un code PHP que j'ai écris avec l'aide de plusieurs exemple sur le net, qui permet de réceptionner 1 ou plusieurs images d'un fichier flash pour ensuite les fusionner en une seule.
Mes connaissances en PHP ne vont pas très loin et lors de l'exécution du script, pour une image de grande taille découpé en 4 parties, j'ai l'erreur suivante :
Code : Tout sélectionner
Fatal error: Allowed memory size of 36700160 bytes exhausted (tried to allocate 1896 bytes) in ...
Voilà le code PHP :
<?php
$path = $_POST[ 'path' ]; // Url absolue
$put = $_POST[ 'put' ]; // chemin relatif
$width = $_POST[ 'width' ]; // Largeur finale de l'image
$height = $_POST[ 'height' ]; // Hauteur finale de l'image
$hnd = date("HmsdmY");
$pif = rand(0, 999);
$code = $hnd . $pif;
$nameFile = $put . $code .'.jpg';
if($_POST['file2'] != null)
{
$nameFile2 = $put . $code .'2.jpg';
if($_POST['file3'] != null)
{
$nameFile3 = $put . $code . '3.jpg';
if($_POST['file4'] != null)
{
$nameFile4 = $put . $code . '4.jpg';
if(file_put_contents($nameFile, base64_decode($_POST['file'])))
{
if(file_put_contents($nameFile2, base64_decode($_POST['file2'])))
{
if(file_put_contents($nameFile3, base64_decode($_POST['file3'])))
{
if(file_put_contents($nameFile4, base64_decode($_POST['file4'])))
{
if($dstFile = imagecreatetruecolor ($width, $height))
{
$dstWidth = imagesx($dstFile);
$dstHeight = imagesy($dstFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
if($srcFile = imagecreatefromjpeg($nameFile))
{
$srcWidth = imagesx($srcFile);
$srcHeight = imagesy($srcFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
if($srcFile2 = imagecreatefromjpeg($nameFile2))
{
$srcWidth2 = imagesx($srcFile2);
$srcHeight2 = imagesy($srcFile2);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
if($srcFile3 = imagecreatefromjpeg($nameFile3))
{
$srcWidth3 = imagesx($srcFile3);
$srcHeight3 = imagesy($srcFile3);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
if($srcFile4 = imagecreatefromjpeg($nameFile4))
{
$srcWidth4 = imagesx($srcFile4);
$srcHeight4 = imagesy($srcFile4);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
$posX = 0;
$posX2 = $dstWidth / 4;
$posX3 = ($dstWidth / 4) * 2;
$posX4 = ($dstWidth / 4) * 3;
$posY = 0;
if(imagecopymerge($dstFile, $srcFile, $posX, $posY, 0, 0, $srcWidth, $srcHeight, 100))
{
if(imagecopymerge($dstFile, $srcFile2, $posX2, $posY, 0, 0, $srcWidth2, $srcHeight2, 100))
{
if(imagecopymerge($dstFile, $srcFile3, $posX3, $posY, 0, 0, $srcWidth3, $srcHeight3, 100))
{
if(imagecopymerge($dstFile, $srcFile4, $posX4, $posY, 0, 0, $srcWidth4, $srcHeight4, 100))
{
header("Content-type: image/jpeg");
if(imagejpeg($dstFile, $nameFile))
{
echo 'OK';
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
unlink($nameFile4);
}
imagedestroy($dstFile);
imagedestroy($srcFile);
imagedestroy($srcFile2);
imagedestroy($srcFile4);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
}
}
else
{
echo 'ERROR';
}
}
else
{
if(file_put_contents($nameFile, base64_decode($_POST['file'])))
{
if(file_put_contents($nameFile2, base64_decode($_POST['file2'])))
{
if(file_put_contents($nameFile3, base64_decode($_POST['file3'])))
{
if($dstFile = imagecreatetruecolor ($width, $height))
{
$dstWidth = imagesx($dstFile);
$dstHeight = imagesy($dstFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
if($srcFile = imagecreatefromjpeg($nameFile))
{
$srcWidth = imagesx($srcFile);
$srcHeight = imagesy($srcFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
if($srcFile2 = imagecreatefromjpeg($nameFile2))
{
$srcWidth2 = imagesx($srcFile2);
$srcHeight2 = imagesy($srcFile2);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
if($srcFile3 = imagecreatefromjpeg($nameFile3))
{
$srcWidth3 = imagesx($srcFile3);
$srcHeight3 = imagesy($srcFile3);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
$posX = 0;
$posX2 = $dstWidth / 3;
$posX3 = ($dstWidth / 3) * 2;
$posY = 0;
if(imagecopymerge($dstFile, $srcFile, $posX, $posY, 0, 0, $srcWidth, $srcHeight, 100))
{
if(imagecopymerge($dstFile, $srcFile2, $posX2, $posY, 0, 0, $srcWidth2, $srcHeight2, 100))
{
if(imagecopymerge($dstFile, $srcFile3, $posX3, $posY, 0, 0, $srcWidth3, $srcHeight3, 100))
{
header("Content-type: image/jpeg");
if(imagejpeg($dstFile, $nameFile))
{
echo 'OK';
unlink($nameFile2);
unlink($nameFile3);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
unlink($nameFile3);
}
imagedestroy($dstFile);
imagedestroy($srcFile);
imagedestroy($srcFile2);
imagedestroy($srcFile3);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
}
}
else
{
echo 'ERROR';
}
}
}
else
{
if(file_put_contents($nameFile, base64_decode($_POST['file'])))
{
if(file_put_contents($nameFile2, base64_decode($_POST['file2'])))
{
if($dstFile = imagecreatetruecolor ($width, $height))
{
$dstWidth = imagesx($dstFile);
$dstHeight = imagesy($dstFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
if($srcFile = imagecreatefromjpeg($nameFile))
{
$srcWidth = imagesx($srcFile);
$srcHeight = imagesy($srcFile);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
if($srcFile2 = imagecreatefromjpeg($nameFile2))
{
$srcWidth2 = imagesx($srcFile2);
$srcHeight2 = imagesy($srcFile2);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
$posX = 0;
$posX2 = $dstWidth / 2;
$posY = 0;
if(imagecopymerge($dstFile, $srcFile, $posX, $posY, 0, 0, $srcWidth, $srcHeight, 100))
{
if(imagecopymerge($dstFile, $srcFile2, $posX2, $posY, 0, 0, $srcWidth2, $srcHeight2, 100))
{
if(imagejpeg($dstFile, $nameFile))
{
echo 'OK';
unlink($nameFile2);
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
}
else
{
echo 'ERROR';
unlink($nameFile);
unlink($nameFile2);
}
imagedestroy($dstFile);
imagedestroy($srcFile);
imagedestroy($srcFile2);
}
else
{
echo 'ERROR';
unlink($nameFile);
}
}
else
{
echo 'ERROR';
}
}
}
else
{
if(file_put_contents($nameFile, base64_decode($_POST['file'])))
{
echo 'OK';
}
else
{
echo 'ERROR';
}
}
?>
Quelqu'un pourrait-il me donner des conseils sur l'optimisation de ce code stp ?D'avance merci.