【发布时间】:2012-05-10 12:16:53
【问题描述】:
我正在开发一个 web 项目,我有一个名为 init.php 的文件,它基本上初始化数据库连接并使用 spl_autoload_register 加载所有类。它包含在页面的开头。
该文件通常可以正常工作,但是当 m 将此文件包含在子目录页面中时会发生错误。像这样……
包括'../includes/init.php';
我收到了这个致命错误:Cannot redeclare loadModue 先前在线声明的 ....
文件内容如下:
<?php
ob_start();
$profile_time = array() ;
$profile_time['start_time'] = microtime(TRUE) ;
include_once( 'settings.php' ) ;
//ini_set('display_errors', 'on');
//ini_set('error_reporting', E_ALL);
// set correct timezone
date_default_timezone_set('Asia/Calcutta');
// Set default encoding for multibyte strings
mb_language('uni');
mb_internal_encoding('UTF-8');
mb_http_input('UTF-8');
mb_http_output('UTF-8');
mb_regex_encoding('UTF-8');
function loadModule($className)
{
if(file_exists(APP_ROOT.'modules/'.$className.'.php'))
require_once(APP_ROOT.'modules/'.$className.'.php');
}
spl_autoload_register('loadModule');
$profile_time['before_sql_connection_time'] = microtime(TRUE) ;
$DB = mysqli_connect( $db_data['host'] , $db_data['user'] , $db_data['pass'] , $db_data['db']);
Sql::init(array('db' => $DB));
$profile_time['after_sql_connection_time'] = microtime(TRUE) ;
@session_start();
if(User::isLoggedIn())
$_user = new User($_SESSION['user_id']);
else
$_user = new User(0);
if(isSet($_SESSION['user_id']))
$user_data = $_user->getDataArray();
ob_end_clean();
?>
settings.php 定义了 HOST、APP_ROOT 等数据库数据......
我尝试过使用
if(!function_exists(loadModule)){
function loadModule(){.....}
}
但这是给class Sql not found 致命错误...基本上没有加载类。
我尝试将函数的名称更改为loadModule_new,但这给出了与cannot redeclare 相同的错误。
我可以在 StackOverflow 上找到的所有案例从一开始就无法正常工作,但只有在包含在子目录中的情况下才会出现此问题。
【问题讨论】:
标签: php function fatal-error