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()函数一次性读取整个文件直接占满了内存。操作步骤:
- 找到缓存文件:通常在网站目录的
/home/allgates/public_html/vqmod/cache/下,文件名是vqmod.checked - 删除这个文件,或者打开文件清空所有内容(VQMod会自动重新生成新的缓存文件)
方案2:修改代码分批读取文件
如果缓存很快又变大,或者不想删缓存,可以修改代码让它逐行读取文件,避免一次性占用过多内存:
- 打开
/home/allgates/public_html/vqmod/vqmod.php文件 - 找到第336行的代码:
$paths = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - 把这一行替换成以下代码:
$paths = []; // 逐行读取文件,减少内存占用 $handle = fopen($file, 'r'); if ($handle) { while (($line = fgets($handle)) !== false) { $line = trim($line); if (!empty($line)) { $paths[] = $line; } } fclose($handle); }
- 保存文件即可
方案3:再次提升内存限制(治标不治本)
如果前两个方案无效,可以尝试进一步调高内存限制:
- 打开php.ini配置文件,找到
memory_limit = 128M这一行 - 修改为
memory_limit = 256M - 重启你的Web服务器(比如Apache、Nginx)或者PHP-FPM服务
内容的提问来源于stack exchange,提问作者Graeme Harvey
相关产品推荐
相关产品推荐

