2011-10-03 78 views
0

我有一个使用SimpleImage.php (一个简单的图片上传脚本PHP测试http://www.white-hat-web-design.co.uk/blog/resizing-images -with-php /) 调整并保存上载图像的2个副本。腐败(但显然精细)图像

没有验证的巨量,只是检查它是否存在,以及文件扩展名是好的,也是一个exif_imagetype();通话。

这一点,直到我试图上传一个看似普通的JPEG这竟然是无形(和untestably?)腐败已经没有任何问题至今工作。这件事有些不对,但我对图片腐败知之甚少 - 它看起来很好,并且对任何东西都没有问题,但是当我试图在脚本中保存缩放副本时,我收到了一个白页。

的问题无疑是一个具体的形象,我exhastively与其他图像都来自我的本地股票和现货图像的网站进行测试,并且只有一个图像弄坏。

我调整使用的Photoshop副本(预测文件大小啄给了我一些奇怪的号码 - 45meg顶级品质的JPEG),并没有问题上传。

所以我的问题是,我该如何测试?

有问题的图像是在这里:http://chinawin.co.uk/broken.jpg //当心,700K

笔记:我已经有类似的分辨率,图像的大小和名称进行测试,一切从这个图像的工作分开。

更新: 通过试验和错误我已经缩小了脚本分裂的地方,我将图像加载到SimpleImage的var中。奇怪的是,这是第二行(第一行是创建大副本,这是创建缩略图的行)。 评论出来意味着其余的工作正常...也许一些重构将避免这个问题。

月2日更新: 下面是一个代码片段,并从失败行一些背景:

//check if our image is OK 
if ($image && $imageThumb) 
{ 
    //check if image is a jpeg 
    if (exif_imagetype($_FILES[$k]['tmp_name']) == IMAGETYPE_JPEG) 
    { 
     list($width, $height, $type, $attr) = getimagesize($_FILES[$k]['tmp_name']); 
     //echo 1; 
     $image = new SimpleImage(); 
     //echo 2;    
     $image->load($_FILES[$k]['tmp_name']);  
     //echo 3; 
     $imageThumb = new SimpleImage(); 
     //echo 4; 

     //this next line topples my script, but only for that one image - why?: 
     $imageThumb->load($_FILES[$k]['tmp_name']); 
     //echo '5<br/><br/>-------<br/>'; 
     //do stuff, save & update db, etc 
    } 
} 

最后编辑: 原来我的脚本运行内存,并有很好的理由 - 4900x3900图像240ppi的数据加载到内存中后是两倍 - 所以我使用的可能是> 90meg的内存,/图像。

盖帽@Pekka发现这一点。

将脚本重构为仅加载一次图像,然后使用此变量代替它的兄弟,修复了我的脚本。仍然存在(不同的)问题与上传更大(2.5meg)的图像,但这是另一个问题。

回答

2

这是最有可能是内存问题:你的JPG非常大(超过4000 X 4000像素),且无压缩,确实会吃了约48兆字节的RAM。

激活错误报告以确保。如果是这个原因,参见例如这里在做什么:Uploading images with PHP and hitting the script memory limit

+0

致命错误:134217728字节允许的内存大小用尽(试图分配19600字节)在/my_path/SimpleImage.php在第28行 – jammypeach

+0

谢谢你,找到了根本原因:) – jammypeach