You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Opencart内存耗尽错误求助:vqmod.php第336行报错

PHP内存耗尽错误简易修复方案(针对VQMod)

问题详情

错误日志

[16-May-2023 11:18:05 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 33554440 bytes) in /home/allgates/public_html/vqmod/vqmod.php on line 336

报错对应代码

/**
 * VQMod::_loadChecked()
 *
 * @return null
 * @description 加载已检查文件并添加到_doNotMod数组
 */
private static function _loadChecked() {
    $file = self::path(self::$checkedCache);
    if($file && is_file($file)) {
// 第336行
        $paths = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        if(!empty($paths)) {
            foreach($paths as $path) {
                $fullPath = self::path($path, true);
                if($fullPath) {
                    self::$_doNotMod[] = $fullPath;

当前情况

  • 完全不懂PHP
  • 已将php.ini中的内存限制从64M提升至128M,错误仍未解决

简易修复方案

方案1:清空VQMod缓存文件(最推荐)

这个错误根源是VQMod的检查缓存文件过大,file()函数一次性读取整个文件直接占满了内存。操作步骤:

  1. 找到缓存文件:通常在网站目录的/home/allgates/public_html/vqmod/cache/下,文件名是vqmod.checked
  2. 删除这个文件,或者打开文件清空所有内容(VQMod会自动重新生成新的缓存文件)

方案2:修改代码分批读取文件

如果缓存很快又变大,或者不想删缓存,可以修改代码让它逐行读取文件,避免一次性占用过多内存:

  1. 打开/home/allgates/public_html/vqmod/vqmod.php文件
  2. 找到第336行的代码:$paths = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  3. 把这一行替换成以下代码:
$paths = [];
// 逐行读取文件,减少内存占用
$handle = fopen($file, 'r');
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $line = trim($line);
        if (!empty($line)) {
            $paths[] = $line;
        }
    }
    fclose($handle);
}
  1. 保存文件即可

方案3:再次提升内存限制(治标不治本)

如果前两个方案无效,可以尝试进一步调高内存限制:

  1. 打开php.ini配置文件,找到memory_limit = 128M这一行
  2. 修改为memory_limit = 256M
  3. 重启你的Web服务器(比如Apache、Nginx)或者PHP-FPM服务

内容的提问来源于stack exchange,提问作者Graeme Harvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:12:30