потребление памяти скриптом на сервере - PullRequest
0 голосов
/ 08 августа 2011

Обработка изображения после загрузки файла вызывает эту ошибку:

Допустимый объем памяти 67108864 байта исчерпан (попытался выделить 20624 байт) в строке 61

Строка 61:

$imagem = imagecreatefromjpeg($plik);

Ограничение памяти на сервере установлено в 32 МБ.

Я написал такой код:

<?php
$user   = $_POST['user_name'];
   $pass  = $_POST['pass'];
   $file = $_FILES['file']['tmp_name'];


   if ($user == "myuser" && $pass == "mypassword")
   {

    $directory='grafika/small'; 
    $dir=opendir($directory);
    $U = 1;
    while($file_name=readdir($dir))
    {
         if(($file_name!=".")&&($file_name!=".."))
        {
        $U += 1;
        }
    }

    closedir($dir);

    //------------------

    //------   

       list($width, $height) = getimagesize($file);
       $new_height_d = 600;
       $percent_d = $height / 600;
       $new_width_d = $width / $percent_d;
      if ($new_width_d > 1100){
          $percent = $new_width_d / 1100;
          $new_width_d = 1100;
          $new_height_d = $new_height_d/ $percent;

      }


       $percent_m =  $height / 113;
       $new_width_m = $width / $percent_m;

       $image_d = imagecreatetruecolor($new_width_d, $new_height_d);
       $image_m = imagecreatetruecolor($new_width_m, 113);

       $imaged = imagecreatefromjpeg($plik);
       $imagem = imagecreatefromjpeg($plik);

       imagecopyresampled($image_d, $imaged, 0, 0, 0, 0, $new_width_d, $new_height_d, $width, $height);
       imagejpeg($image_d,'grafika/big/'.$U.'.JPG');
       imagecopyresampled($image_m, $imagem, 0, 0, 0, 0, $new_width_m, 113, $width, $height);
       imagejpeg($image_m,'grafika/small/'.$U.'.JPG');
    //--------------------


    //


        $do_zapis =' <img class="mini" src="./grafika/small/'.$U.'.JPG" onClick="wys_big(\''.$U.'\')" alt="zaklin"/>';
        $file = "subpages/min_lista.html";
        $f = fopen($file, "a"); 
        flock($f, 2); 
        fwrite($f, $do_zapis); 
        flock($f, 3); 
        fclose($f);
    //-------------   


       echo('ok');

   }
   else{
       echo('not ok');

   }
   header("Refresh: 2; URL=edycja.php");
?>

И когда я пытаюсь запустить его на сервере, загружая файл * .jpg (менее 1 МБ), появляется ошибка (см. Выше).

Так что я думаю, есть ли способ уменьшить потребление памяти или это нормально?

1 Ответ

2 голосов
/ 08 августа 2011

У вас просто предел памяти. Увеличьте лимит памяти (например, 256 МБ для работы с изображениями), и проблема должна исчезнуть.

Проверьте ваш PHP.ini или увеличьте лимит, прежде чем начать работу с изображениями:

ini_set("memory_limit", "256m -- 256 megabytes for image manipulation -- m");
...