У меня есть следующие настройки (архитектура) в моем проекте веб-дизайна. Который не работает по какой-то причине.
У меня есть страница index.php со следующими включениями в верхней части
require_once("includes/init.php");
Тогда в моем init.php у меня есть
require_once('config.php');
require_once('functions.php');
ob_start();
spl_autoload_register('load_api');
$db = new Database();
$db->connect();
И в моем файле конфигурации я определил следующее
define('DOC_ROOT', $_SERVER['DOCUMENT_ROOT']."/websitename");
define('CLASS_LIB', DOC_ROOT . "/classes");
И в моих функциях автозагрузки есть
function load_api($class){
if(!file_exists(CLASS_LIB."/".$class. '.class.php') )
return false;
require_once( CLASS_LIB."/".$class. '.class.php');
return true;
}
Когда я запускаю эту структуру дизайна в моем xamp / xdebugger, она выдает ошибки
( ! ) Notice: Use of undefined constant CLASS_LIB - assumed 'CLASS_LIB' in D:\websitename\includes\functions.php on line 7
Call Stack
# Time Memory Function Location
1 0.0009 144128 {main}( ) ..\index.php:0
2 0.0020 155632 require_once( 'D:\websitenae\includes\init.php' ) ..\index.php:2
3 0.0129 400360 spl_autoload_call ( 'Database' ) ..\index.php:6
4 0.0129 400408 load_api( $class = 'Database' ) ..\index.php:0
( ! ) Fatal error: Class 'Database' not found in D:\websitename\includes\init.php on line 6
Call Stack
# Time Memory Function Location
1 0.0009 144128 {main}( ) ..\index.php:0
2 0.0020 155632 require_once( 'D:\websitename\includes\init.php' ) ..\index.php:2
Кажется, ошибка в том, что CLASS_LIB не обнаружен, однако я не могу понять, почему, поскольку он, кажется, уже определен правильно и загружается до этого сценария, плюс я не вижу двойного включения также в коде … какие-либо идеи высоко ценятся?
Наконец я нашел это, это может случиться с кем угодно, и поэтому я публикую это как решение.
Когда я запустил это, я не получил никаких ошибок от функции require (), потому что он загружает файл конфигурации, однако я обнаружил, что он не загружает правильный файл конфигурации в указанном месте,
вместо этого он идет в PEAR, включая местоположение и загрузку файла точного имени, называемого «config.php», поэтому require не выдал мне ошибку, и именно поэтому мой конфигурационный файл vars не был загружен.
Так что, чтобы исправить, я должен указать явный путь для моей конфигурации, как показано ниже
require_once(__DIR__.'/config.php');
Это решило проблему 🙂 очень сложно
Насколько я знаю ob_start (); должен быть сверху и ob_end_flush (); внизу
ob_start(); // top
//
//
ob_end_flush(); // bottom