这两天做项目出现的几个问题
时间:2010-08-26 来源:真爱无悔
今天老大刚到公司,过了以后就把我叫过去说:“客户发邮件说,昨天做的那个订单详情导出功能,商品信息是累加的。。。。。。”。出现这个问题的原因可能是会因为在循环的时候没有清空上次循环遗留下来的数据。因为,今天我的机器直接罢工了,直接在老大的机器上 查看了下源代码,果然不出所料,就是因为用于存储商品信息的字符串因为首先声明为$pInfo = ''的样式,而是直接的$pInfo .= $product; 因为php的变量可以不声明而直接使用的。所以,这个也不会报错,只是,这个字符串会直接把所有的$product连接起来。还容易出现错误的就是 在循环中使用数组的情况。比如,需要使用一个数组存储信息,不把实现把变量声明为空数组array(),而是直接 $arr[] = $arrInfo 这样使用的话,一会出现这个的问题。 所以,在使用循环的时候,以后就需要注意了。。。 为了,出现上面的问题,最简单有效的方式是,在使用一个变量之前先进行声明并初始化。 其实,昨天在完成那个“订单详情导出”功能的时候 还出现了一个问题。当管理员权限后台所有的订单(大约有4900多条记录)执行导出的时候,生成的是xls文件只有表头和一句话 意思是内存不足。 原因是什么那? 就是因为 我把 所有的订单详情信息都放在一个数组$list中,然后依次性写入写入导出文件中。。。 为什么要这么做? 因为系统自定的那个导出xls方法就是这样设计的,一次接受多行记录,然后一个foreach循环写入到xls文件中。 1个4900左右的订单就把内存用尽了。那更不用说5000++的订单量了。那也总不能老是让客户20条20条的往外导数据吧。 怎么解决? 问题其实很简单,既然不能吧所有订单详情放在一个array中一次性的写入文件中,我们可以选择一条一条的写。 以前的实现方式为 function exportOrderDetail(){ ...... ...... ...... $list = array();//用于存放订单详情数据 foreach($_POST['order_id'] as $order_id){ $orderInfo = getOrderInfo($order_id); $orderInfo['xx'] = getXXByOrder($order_id); $orderInfo['yy'] = getYYByOrder($order_id); $orderInfo['zz'] = getZZByOrder($order_id); ... ... ... $list[] = $orderInfo; } ...... ...... ...... exportXls($list);//往xls文件中写入内容 } 详细大家都看出问题了,如果订单的数量足够大的话,$list数组就会表的足够的,从而导致内存不足的问题。 问题,找到了,那么应该怎么解决那? 很简单。 直接将 exportXls($list)放到foreach内部就可以了。 将原来foreach中的$list[] = $orderInfo 修改为$list = array($orderInfo); 即可。 有人说,为什么不 直接 exportXls(array($orderInfo)); 因为,人家在实现exportXls($data)的时候,在$data的前面添加了个符号"&",所以,必须传递给exportXls方法 的是一个变量。。。。
相关阅读 更多 +