私はWebプロジェクトに取り組んでおり、基本的にデータベース接続を初期化し、spl_autoload_registerを使用してすべてのクラスをロードするinit.phpというファイルがあります。これはページの先頭に含まれています。
通常、ファイルは正常に動作しますが、このファイルをサブ ディレクトリ ページに含めるとエラーが発生します。このような ...
'../includes/init.php' を含めます。
この致命的なエラーが発生しています: 行で以前に宣言された 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 などの n DB データを定義します....
使ってみた
if(!function_exists(loadModule)){
function loadModule(){.....}
}
しかし、これはclass Sql not found
致命的なエラーを引き起こしています...基本的にクラスをロードしていません。
関数の名前を に変更しようとしましたloadModule_new
が、同じエラーが発生していcannot redeclare
ます。
StackOverflow で見つけたすべてのケースは最初から機能していませんでしたが、サブディレクトリ内に含まれている場合にのみこの問題が発生します。