抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

最近写公司的项目跑起来跟我说内存不够用了,足足用了100多M!咋回事?

任务是使用 PHP 写个接口,用户上传 Excel 表格,服务器解析后扔到数据库里,保证不能有重复,给商品链接加了唯一索引。

这还不简单?立即推,写完了!

然后跑起来就报这个错了:

image-20220126093708656

说我内存超标了,我记得这个在 php.ini 文件里有设置,写的 128M ,差不多是这些。

当时我就纳闷了,处理个 Excel 表需要这么大内存吗?于是我就在读完数据之后将 ExcelReader 给释放了,用到的临时变量也都用完立即释放,使用unset()

然而还是报这个错,我准备定位一下,把解析 Excel 表格那部分代码先注释,再跑起来发现能跑了,就在那套循环里。

最终发现是参数传来的 StartRow 永远是 true

71643159522_.pic

61643159522_.pic

在赋值默认值的时候使用了||,我以为是和 JavaScript 一样,可以返回运算后的值,实际不是。

image-20220126093833457

改成??就可以了。

51643159521_.pic

成功解决问题,完成任务!收工,提交代码下班!

image-20220126093924081

补充一下知识:

  1. a ?? 0 等同于 isset(a) ? a : 0。
  2. a ?: 0 等同于 a ? a : 0。
  3. empty: 判断一个变量是否为空(null、false、00、0、'0′、』这类,都会返回true)。
  4. isset: 判断一个变量是否设置(值为false、00、0、'0′、』这类,也会返回true)。

来源:PHP7引入的"??“和”?:"的区别讲解_php实例_脚本之家 (jb51.net)

评论