我的PHP脚本无法上传50M以上的图像

时间:2014-12-22 11:46:45

标签: php file upload

我必须上传75MB(JPEG和PNG)图像。得到这样的错误:

  

(致命错误:内存不足(已分配-1912078336)(试图分配30000字节)

如果我上传40+,50以上的png或jpeg。

在此步骤中$new_image = imagecreatetruecolor($width, $height);如果我上传的是30+ JPG图片,我收到错误:

  

致命错误:内存不足(已分配-1910767616)(试图分配43200字节)

我还在PHP值下面添加了.htaccess:

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

这是脚本:

<?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;

                } 
}  

?>

1 个答案:

答案 0 :(得分:-1)

请更改您的php.ini设置。

找到行:

upload_max_filesize = 100M
post_max_size = 100M

如果您有共享托管,则应该使用cpanel等告诉管理员,请从控制台执行此操作,另请参阅herehere

请在创建新问题之前搜索.Google是您的朋友。