首先,我不是在寻找“检查您的 PHP 内存限制”或“您需要添加更多内存”之类的答案......我在一台专用机器上,有 8GB 的 RAMS;其中512MB是内存限制。我总是在一行上出现内存不足错误:
澄清一下:这部分代码属于Joomla!CMS。
function get($id, $group, $checkTime){
$data = false;
$path = $this->_getFilePath($id, $group);
$this->_setExpire($id, $group);
if (file_exists($path)) {
$data = file_get_contents($path);
if($data) {
// Remove the initial die() statement
$data = preg_replace('/^.*\n/', '', $data); // Out of memory here
}
}
return $data;
}
这是 Joomla 缓存的一部分……此函数读取缓存文件并删除阻止直接访问文件的第一行并返回其余数据。
如您所见,该行使用 preg_replace 删除缓存文件中的第一行,该行始终为:
<?php die("Access Denied"); ?>
我的问题是,在我看来,如果初始 $data 很大,它是一个简单的过程(从文件内容中删除第一行)会消耗大量内存吗?如果是这样,解决该问题的最佳方法是什么?我不介意没有 die() 行的缓存文件,我可以采取安全措施并阻止对缓存文件的直接访问。
我错了吗?
更新
正如帖子所建议的那样,正则表达式似乎产生的问题多于解决问题。我试过了:
echo memory_get_usage() . "\n";
在正则表达式之后然后尝试使用相同的语句substr()
。内存使用量的差异非常小。几乎没有。
那是为了你的贡献,我仍在试图找出为什么会发生这种情况。