我有一个使用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)的图像,但这是另一个问题。
致命错误:134217728字节允许的内存大小用尽(试图分配19600字节)在/my_path/SimpleImage.php在第28行 – jammypeach
谢谢你,找到了根本原因:) – jammypeach