这几天在测试身份证上传出错的问题时碰到一个奇怪的问题,个别用户反映身份证上传不成功,一直出错,但是tiandi自己试了用手机拍摄的身份证照片即使2M多的也能通过PC或者手机上传成功,已经排除IE不兼容的问题。
报错的内容一直是说内存不足,类似这种:
Fatal error: Allowed memory size of 6744324432 bytes exhausted。
问用户要了上传出错的图片文件,才500K左右,本地调试依旧是同样错误。见鬼了,尼妹的PHP开的是64M的内存上限,一张500K的照片跟我说内存不足,我去。报错是由imagecreatefromgif/jpeg/png的函数引起的,没有办法之下,只能去研究这几个函数的计算方式。结果最终发现端倪,这几个函数是类似用逐行读取的方式去读取图片文件,然后写入内存,那张500K的用户身份证照片不知道是用什么东西压缩的,像素大小依旧是5000X3900,尼妹的,不知道哪款狗日的图片处理软件做的图片,还是现在的图像处理软件都有这种功能了。
在身份证上传里加上以下判定,解决报错的问题。
$imagearray = getimagesize($img_file); if(!$imagearray) { show_message('非法图片。', $_LANG['back_page_up'], "user.php?act=sfz_img", 'error'); exit; } else { $memory = get_bytes(ini_get('memory_limit')); if(($imagearray[0] * $imagearray[1] * 4) > $memory ) { show_message('图片尺寸过大或者图片像素('.$imagearray[0].'*'.$imagearray[1].')过大,请调整后再次上传。', $_LANG['back_page_up'], "user.php?act=sfz_img", 'error'); exit; } }
文章评分2次,平均分5.0:★★★★★
内容好专业。
问题还真多,哈哈。。你会一直围绕这个问题跟新博客。。。
这也是没有办法,最近都是充斥着ecshop