par
Rockntrek » 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 :
Code : Tout sélectionner
Fatal error: Allowed memory size of 36700160 bytes exhausted (tried to allocate 1896 bytes) in ...
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 :
<?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.
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 :
[code]
Fatal error: Allowed memory size of 36700160 bytes exhausted (tried to allocate 1896 bytes) in ...
[/code]
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 :
[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';
}
}
?>
[/php]
Quelqu'un pourrait-il me donner des conseils sur l'optimisation de ce code stp ?
D'avance merci.