【问题标题】:ob_end_clean not clear buffer after includeob_end_clean 包含后不清除缓冲区
【发布时间】:2023-03-23 06:04:01
【问题描述】:

我正在使用此代码在我的 CMS 中获取模块信息:

global $hook;
$hook = new bn_hookfunc;

ob_start();
include_once($mydir);
ob_end_clean();
$mod_name = $hook->call_function('module_name');
$mod_ver  = $hook->call_function('module_version');

我的模块 config.php 看起来像这样:

global $hook;
$hook->module_name='modname';
$hook->module_version='modver';

function modname()
{
    return 'test module';
}

function modver()
{
    return 'v1.0.0';
}

此代码在 PHP 5.4 中完美运行。

但是我将我的 xampp 更新到了 1.83,所以 PHP 更新到了 5.5.3,现在我出现了这个错误:

Cannot redeclare modname() (previously declared in \modules\example\config.php:13) in \modules\Z48ilWd2l80cYed8\config.php on line 14

我该如何解决这个问题?

【问题讨论】:

  • 您可能在某处获得了include()require() 而不是include_once()/require_once(),导致config.php 被加载两次。

标签: php include hook redeclare


【解决方案1】:

这是一个糟糕的架构。我不明白它在上一个版本中是如何工作的。如果每个模块都有函数modnamemodver 一定有错误,因为在php 中你不能声明多个同名的函数。在您的情况下,我认为您首先包含文件\modules\example\config.php,而不是\modules\Z48ilWd2l80cYed8\config.php。请检查并删除包括\modules\example\config.php

【讨论】:

  • 我用这个代码ob_start();包括一次($mydir); ob_end_clean();用于将每个 config.php 加载到缓冲区中,然后清除缓冲区以防止重新声明函数,但它现在不起作用
  • @lord_viper 你找不到包括\modules\example\config.php
  • 我找到了这个并包含了完美的但 ob_end_clean 无法清除缓冲区此代码对我的 cms 小工具工作完美
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多