2014-09-29 42 views
0

我的網頁設計項目中有以下設置(架構)。由於某種原因,這不適用於某種情況。PHP錯誤是說CONSTANT沒有定義,但它已經定義和值是空的?

我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運行這個設計結構,但我無法弄清楚,爲什麼,因爲它似乎已經正確定義並加載此腳本之前,再加上我沒有看到雙重包含也在代碼中...任何想法是讚賞很多?

+0

將一個調試器語句您的配置文件,不斷的後定義,並確保它在那裏停止,並且常量的值是正確的。無論出於何種原因,都有可能無法達到這一點。 – Erik 2014-09-29 08:13:54

+0

沒有變化,你可以清楚地看到。配置在執行前需要一次並調用。 – mahen3d 2014-09-29 10:38:23

+0

是的,沒有工作,但調試顯示,雖然包含配置文件(要求不提供任何錯誤),但沒有包含定義值的配置中的內容實際上並未執行..即使在配置中簡單的回聲不會得到但是不要在require()中給我一個錯誤... – mahen3d 2014-09-30 02:50:06

回答

1

最後我發現它,這可能發生在任何人身上,因此我發佈這個解決方案。

當我運行這個我沒接到了require()函數的任何錯誤,因爲它加載配置文件,但是我發現它不加載在給定的位置正確的配置文件,

相反,它去PEAR包括位置和加載確切的名稱文件稱爲「config.php」,這就是爲什麼要求沒有給我錯誤,這就是爲什麼我的配置文件變量沒有加載。

因此,要解決我必須指定像爲我的配置顯式路徑下面

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

這解決了這個問題:)非常棘手

-2

據我所知ob_start();必須在頂部,並且ob_end_flush();底部爲

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

與ob_start()doewsnt無關,即使沒有它們也是如此 – mahen3d 2014-09-29 07:37:30

+0

ob_start(); require_once(「includes/init.php」); require_once('config.php'); require_once('functions.php'); 嘗試此操作或檢查您的連接數據 – 2014-09-29 07:45:44

+0

即使沒有ob也無法正常工作。即使我把它放在最上面,也沒有什麼改變。 – mahen3d 2014-09-29 10:40:00

相關問題