最近写公司的项目跑起来跟我说内存不够用了,足足用了100多M!咋回事?
任务是使用 PHP 写个接口,用户上传 Excel 表格,服务器解析后扔到数据库里,保证不能有重复,给商品链接加了唯一索引。
这还不简单?立即推,写完了!
然后跑起来就报这个错了:
说我内存超标了,我记得这个在 php.ini
文件里有设置,写的 128M ,差不多是这些。
当时我就纳闷了,处理个 Excel 表需要这么大内存吗?于是我就在读完数据之后将 ExcelReader 给释放了,用到的临时变量也都用完立即释放,使用unset()
。
然而还是报这个错,我准备定位一下,把解析 Excel 表格那部分代码先注释,再跑起来发现能跑了,就在那套循环里。
最终发现是参数传来的 StartRow
永远是 true
在赋值默认值的时候使用了||
,我以为是和 JavaScript
一样,可以返回运算后的值,实际不是。
改成??
就可以了。
成功解决问题,完成任务!收工,提交代码下班!
补充一下知识:
- a ?? 0 等同于 isset(a) ? a : 0。
- a ?: 0 等同于 a ? a : 0。
- empty: 判断一个变量是否为空(null、false、00、0、'0′、』这类,都会返回true)。
- isset: 判断一个变量是否设置(值为false、00、0、'0′、』这类,也会返回true)。