2017-11-11 169 views
1

有人可以帮助我,几乎所有的可能头发都已经走了。试图将大图片上传到网站时遇到问题。我已经解决了这个问题,一切似乎都正常。我用10Mb + JPEG文件测试了我的脚本,并且看起来都很完美。但是,我刚刚尝试从某个电话(4.9Mb)上载JPEG,并且出现500错误。看看PS中的图片,尺寸为72dpi时宽1054px,高1874px。任何人都可以帮助我,为什么这是一个问题,我怎么解决它?如果我把图片缩小(700px宽),它会上传吗?大尺寸PHP上传图片

有没有人有同样的问题?下面是我的代码,它旋转图像(因为手机上传的一些内容一旦上传),然后调整大文件的大小以便存储。我测试过的所有照片似乎都能正常工作......除了这张照片外,这张照片很蠢!有人请帮忙!

$file_name = $_FILES['newPicture']['tmp_name']; 

correctImageOrientation($file_name); 
AdjustPicSize($file_name); 


function correctImageOrientation($file_name) { 
    if (function_exists('exif_read_data')) { 
    $exif = exif_read_data($file_name); 
    if($exif && isset($exif['Orientation']) || !isset($exif['Orientation'])) { 
     $orientation = $exif['Orientation']; 
     if($orientation != 1){ 
     $img = imagecreatefromjpeg($file_name); 
     $deg = 0; 
     switch ($orientation) { 
      case 3: 
      $deg = 180; 
      break; 
      case 6: 
      $deg = 270; 
      break; 
      case 8: 
      $deg = 90; 
      break; 
     } 
     if ($deg) { 
      $img = imagerotate($img, $deg, 0);  
     } 
     // then rewrite the rotated image back to the disk as $filename 
     imagejpeg($img, $file_name, 95); 
     } // if there is some rotation necessary 
    } // if have the exif orientation info 
    } // if function exists  
} 


function AdjustPicSize($file_name) 
{ 
    $maxDim = 800; 

     list($width, $height, $type, $attr) = getimagesize($file_name); 
     if ($width > $maxDim || $height > $maxDim) { 
      $target_filename = $file_name; 
      $ratio = $width/$height; 
      if($ratio > 1) { 
       $new_width = $maxDim; 
       $new_height = $maxDim/$ratio; 
      } else { 
       $new_width = $maxDim*$ratio; 
       $new_height = $maxDim; 
      } 
      $src = imagecreatefromstring(file_get_contents($file_name)); 
      $dst = imagecreatetruecolor($new_width, $new_height); 
      imagecopyresampled($dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
      imagejpeg($dst, $target_filename); // adjust format as needed 
     } 
} 

请温和一点,我对这一切都有点新鲜感!

+0

比500错误更详细的信息将有助于诊断。你可以检查你的PHP日志文件,看看实际的错误是什么? – Bert

回答

0

这是内存限制问题,您可能想要增加它或考虑使用图像magick。 GD使用RAM来存储数据并从5 MB文件创建新资源(大尺寸)将花费你的内存

+0

Hi ya Trac,非常感谢您的回复!这绝对是一个内存问题,即使我可以上传图像3倍的文件大小? – Origination

+0

这不是关于文件大小,它是文件尺寸,从20兆像素相机拍摄的jpeg小于1MB,但处理时可能会损坏您的内存,尝试使用Image Magick或在使用imagecreatefromjpeg之前首先检查尺寸 –

+0

非常感谢Trac,我刚刚记起来,有问题的文件似乎上升了!谢谢!真的很感激它! – Origination