2011-06-28 28 views
1

我有以下錯誤重新聲明一個類(在一個較低的目錄)

Fatal error: Cannot redeclare class Database in /home/content/63/8026363/html/include/user_database.php on line 5

鏈接到該行

class Database

但我還沒有重新聲明這在任何地方,我可以看到。

我檢查了所有的包含文件,但仍然無法看到它。

我現在已將名稱更改爲user_database1.php,這是DEFINITELY只在我的整個系統中包含一次,我仍然收到相同的消息!

這隻發生在我的root/admin目錄中。 當我將文件移動到根目錄並將包含文件從../file.php更新爲file.php時,它完美運行。

我不明白爲什麼在/ admin目錄中使用file.php並使用../來包含文件不起作用!

任何人都可以提供這方面的任何經驗?或者可能的修復。

,我將提供從有問題的文件的開頭部分代碼..

<?php 

include("../include/session.php"); 
include("../include/admin_database.php"); 

顯然,這是問題,但我不明白爲什麼!

希望有人能幫助!

+1

如果名稱很通用,如果其中一個擴展名有一個名爲'Database'的類,我不會感到驚訝。你確定你也搜索了應用程序中的所有文件嗎? – Brad

+1

也許你在引用/home/content/63/8026363/html/include/user_database.php的文件中使用require而不是require_once? – MoarCodePlz

+0

我現在已將名稱更改爲user_database1.php,這是DEFINITELY在我的整個系統中只包含一次,並且我仍然收到相同的消息! – sark9012

回答

1

檢查PHP已經定義了一個名爲database.php中的文件(問題已經顯著,因爲有很多的答案下面提交的更新)。 也許你正在使用一些框架或庫。

+0

不,我很確定他的意思是「做」。 – cypher

3

如果您包含文件兩次,則會重新聲明。改用include_once()來防止這種情況發生。

如果您不能確定哪裏是一流的最初聲明,你可以使用Reflection API來獲取文件的名稱和代碼行:

$class = 'Database'; 
if(class_exists($class)) 
{ 
    $oRefl = new ReflectionClass($class); 
    $message = sprintf('Class %s already defined in %s on line %s.', $class, $oRefl->getFileName, $oRefl->getStartLine); 
    throw new DomainException($message); 
} 

廣場,該行之前,可以定義類Database找出哪個文件最初定義了類。

+0

運行該未捕獲的異常'DomainException'時出現此消息'Class Database已在線定義'。 in /home/content/63/8026363/html/index.php:9堆棧跟蹤:#0 {main}拋出 – sark9012

+0

檢查你在第9行的index.php文件。是否有'class Database'可能? – hakre

+0

不,沒有。我注意到導致問題的腳本是一個較低的目錄,因此我使用../來回到主目錄。當我將腳本移動到目錄並更改鏈接時,它非常完美。有任何想法嗎? – sark9012

1

你可能已經包含在您的數據庫類不止一次,速戰速決,因爲這是對這樣的事情添加到您的類的頂部:

if(!class_exists('Database')){ 
    class Database{ 
    // so on 
} 

這可以確保你的類只被定義一次。

+0

我添加了代碼,並得到這個允許的內存大小67108864字節用盡(試圖分配19456字節) – sark9012

+0

看起來你的主機正在限制你64M內存。您的代碼中可能存在一些需要解決的性能問題。 – Sam152

+0

雖然只是隨機發生,但早些時候還好。然後我嘗試再次運行腳本,它停止工作! – sark9012