如何移除Codeigniter中{memory_usage}伪变量的文件大小单位
根因说明
你拿到的$mem根本不是解析后的带单位内存数值字符串,而是未被模板引擎替换的伪变量字面量{memory_usage}。这个字符串总长度为14位,你执行substr($mem, 0, -2)截取前12位,自然会输出{memory_usag。
另外你原先的固定截断后2位的方案本身也有问题:内存单位会根据数值大小动态变为B/KB/MB/GB,固定截2位会出现数值截断错误。
正确实现方案
方案1:直接用原生PHP方法获取(最稳定,不受模板解析时机影响)
不需要依赖CI框架的Benchmark类返回结果,直接获取内存字节数后自行换算为需要的单位:
// 获取当前内存占用(单位:字节),转换为MB后保留2位小数 $memSize = round(memory_get_usage() / 1024 / 1024, 2); echo $memSize;
方案2:对已解析的带单位字符串做数值提取
如果确实需要用Benchmark类返回的结果,先确认调用时机是在模板解析之后,再用正则匹配提取数值,适配所有单位场景:
$mem = $this->benchmark->memory_usage(); $memSize = 0; if ($mem !== '{memory_usage}') { // 匹配字符串中所有数字和小数点的组合 preg_match('/\d+\.?\d*/', $mem, $matches); $memSize = $matches[0] ?? 0; } echo $memSize;
内容的提问来源于stack exchange,提问作者POPI
相关产品推荐
相关产品推荐

