PHP错误是说CONSTANT未定义但已定义且值为空?

时间:2014-09-29 07:31:34

标签: php constants

我的网页设计项目中有以下设置(架构)。由于某种原因,这不起作用。

我有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();

在我的Config文件中,我有以下定义的

 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,但是我无法弄清楚为什么因为它似乎已经正确定义并在此脚本之前加载,加上我也没有在代码中看到双重包含...任何想法都很受欢迎?

2 个答案:

答案 0 :(得分:1)

最后我发现它,这可能发生在任何人身上,因此我将其作为解决方案发布。

当我运行这个时,我没有从require()函数中得到任何错误,因为它加载了一个配置文件,但是我发现它没有在给定位置加载正确的配置文件,

而不是它去PEAR包含位置和加载名为“config.php”的确切名称文件,这就是为什么要求没有给我错误,这就是为什么我的配置文件变量没有加载。

所以要修复我必须为我的配置指定显式​​路径,如下所示

require_once(__DIR__.'/config.php');

这解决了问题:)非常棘手

答案 1 :(得分:-2)

据我所知 ob_start(); 必须位于顶部, ob_end_flush(); 位于底部。

ob_start(); // top
//
//
ob_end_flush(); // bottom