-6

I have to upload 75MB (JPEG and PNG) images. Getting error like this:

(Fatal error: Out of memory (allocated -1912078336) (tried to allocate 30000 bytes)

If I am uploading 40+, 50+ above png or jpeg.

In this step $new_image = imagecreatetruecolor($width, $height); if i am uploading 30+ JPG image I am getting error:

Fatal error: Out of memory (allocated -1910767616) (tried to allocate 43200 bytes)

I have also added in .htaccess below PHP values:

php_value upload_max_filesize 2000M
php_value max_input_time 1000
php_value memory_limit 2000M
php_value max_execution_time 20000
php_value post_max_size 2000M

Here is script:

<?php
set_time_limit(300);
ini_set('memory_limit', '64800M');
ini_set("max_execution_time",10000);
ini_set ("display_errors", "1");
error_reporting(E_ALL);

$target_dir = "uploads/";
$unq_name=(mt_rand(10,1000));
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

$source_photo = 'uploads/'.basename( $_FILES["fileToUpload"]["name"]);
$dest_photo = 'uploads/testing_'.$unq_name.'.'.$imageFileType;


$image = new SimpleImage(); 
$image->load($source_photo);
$image->scale(50);
$image->save($dest_photo); 


class SimpleImage {   
var $image; var $image_type;   
function load($filename){   
            $image_info = getimagesize($filename); 
            $this->image_type = $image_info[2]; 
            if( $this->image_type == IMAGETYPE_JPEG ) 
             {  
             $this->image = imagecreatefromjpeg($filename);
             } 
             elseif( $this->image_type == IMAGETYPE_GIF ) 
             {   
             $this->image = imagecreatefromgif($filename); 
             } 
             elseif( $this->image_type == IMAGETYPE_PNG )
             { 
             $this->image = imagecreatefrompng($filename);
             } 
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=70, $permissions=null) 
{
            image_type=$this->image_type;

          if( $image_type == IMAGETYPE_JPEG )
          {
             imagejpeg($this->image,$filename,$compression);
          } 
          elseif( $image_type == IMAGETYPE_GIF ) 
          {
             imagegif($this->image,$filename);  
          } 
          elseif( $image_type == IMAGETYPE_PNG )
           {
            imagealphablending($this->image, false);
            imagesavealpha($this->image,true);
            imagepng($this->image,$filename);
          }   
          if( $permissions != null) {
             chmod($filename,$permissions);
          }
  }

function output($image_type=IMAGETYPE_JPEG)
{
   if( $image_type == IMAGETYPE_JPEG )
   { 
       imagejpeg($this->image);
    }
     elseif( $image_type == IMAGETYPE_GIF ) 
    {  
     imagegif($this->image);
      } 
     elseif( 
     $image_type == IMAGETYPE_PNG )
     {   
     imagepng($this->image); 
     } 
} 
function getWidth()
{  
          return imagesx($this->image); 
} 
function getHeight() {  
           return imagesy($this->image);        
}
function resizeToHeight($height)
{   
       $ratio = $height / $this->getHeight(); 
       $width = $this->getWidth() * $ratio; 
       $this->resize($width,$height);
} 
function resizeToWidth($width)
{ 
             $ratio = $width / $this->getWidth(); 
             $height = $this->getheight() * $ratio; 
             $this->resize($width,$height);
}   
function scale($scale) 
{ 
         $width = $this->getWidth() * $scale/100; 
         $height = $this->getheight() * $scale/100; 
         $this->resize($width,$height);
}  

function resize($width,$height) 
{   

              $new_image = imagecreatetruecolor($width, $height); 
                if( $this->image_type == IMAGETYPE_GIF || $this->image_type == IMAGETYPE_PNG) 
                { 
                                          $current_transparent = imagecolortransparent($this->image);
                                            if($current_transparent != -1) 
                                            { 
                                            $transparent_color = imagecolorsforindex($this->image, $current_transparent); 
                                            $current_transparent = imagecolorallocate($new_image, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']); 
                                            imagefill($new_image, 0, 0, $current_transparent); 
                                            imagecolortransparent($new_image, $current_transparent); 
                                            } 
                                            elseif( $this->image_type == IMAGETYPE_PNG) 
                                            {
                                                 imagealphablending($new_image, false); 
                                                 $color = imagecolorallocatealpha($new_image, 255, 255, 255, 127); 
                                                 imagefill($new_image, 0, 0, $color); imagesavealpha($new_image, true);
                                            } 
                                    } 
                                 imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
                                 $this->image = $new_image;

                } 
}  

?>
Vasanth
  • 35
  • 6
  • 1
    You probably need to change your memory limits in the php.ini config, see http://stackoverflow.com/questions/6314733/php-fatal-error-out-of-memory-allocated-80740352-tried-to-allocate-12352-byt – chrki Dec 22 '14 at 11:48
  • ^ He allready did this. Try this Vasanth : `ini_set('memory_limit', -1);` – DarkBee Dec 22 '14 at 11:52
  • The memory that is needed to resize an image is also based on the resolution of the picture. To resize a 3000 x 3000 picture u'd need about 50MB ram just to do this – DarkBee Dec 22 '14 at 11:53
  • 1
    I've nearly rewritten your post. I've added the code in (we prefer that to external links), introduced the php.ini settings changes, and reformatted it so it is readable. If you can make your posts similar to the above, it saves editors a lot of work! Thanks. – halfer Dec 22 '14 at 11:57
  • let me try this once "ini_set('memory_limit', -1);" – Vasanth Dec 22 '14 at 12:12
  • Still same error "Fatal error: Out of memory (allocated -1911554048) (tried to allocate 10800 bytes)" after set this ini_set('memory_limit', -1); any why thanks DarkBee. – Vasanth Dec 22 '14 at 12:19
  • How much memory is available on your server? – DarkBee Dec 22 '14 at 12:50
  • any suggustions please jpeg:40MB, PNG:50MB uploading. but i need to uploadable upto 75MB image size. – Vasanth Dec 22 '14 at 14:50
  • More than 60GB available on our server. – Vasanth Dec 22 '14 at 14:52
  • Final this is work for me: set_time_limit(0); ini_set('memory_limit', '20000M'); – Vasanth Dec 23 '14 at 08:16
  • Every one thanks lot for supporting..:) – Vasanth Dec 23 '14 at 08:17

1 Answers1

-1

Please change your php.ini settings .

find lines :

upload_max_filesize = 100M
post_max_size = 100M

If you have shared hosting you should tell the administrator yet using cpanel etc , do it from the control panel , Also See here and here

And please search before create a new question.Google is your friend.

Community
  • 1
  • 1
absfrm
  • 352
  • 2
  • 14
  • any suggustions please jpeg:40MB, PNG:50MB uploading. but i need to uploadable upto 75MB image size. – Vasanth Dec 22 '14 at 14:50