2013-03-18 57 views
0

所以我的Evo網站在前些天停止工作 - 剛剛出現500錯誤。我得到了我的主機檢查日誌,發現這個:ModX Evo:document.parser.class.inc.php中的PHP錯誤

[error] PHP Fatal error: Cannot redeclare insert_metka() (previously declared in 
/home/mysite/public_html/manager/includes/document.parser.class.inc.php(790) : eval()'d code:2) 
in /home/mysite/public_html/manager/includes/document.parser.class.inc.php(790) : eval()'d code on line 12 

我已經厭倦註釋掉出錯的行和刪除整個文件都無濟於事。有誰知道這意味着什麼以及如何解決它?

編輯:在行790代碼:

eval ($pluginCode); 
+0

'不能重新聲明insert_metka()'說,你是聲明函數的兩倍。你應該檢查你的包含文件。爲了確保不要包含多次,你可以使用'include_once'或'requiere_once'而不是'include'和'requiere' – MatRt 2013-03-18 05:29:45

+0

你可以在第790行的文件'document.parser.class中給出一段代碼.inc.php'? – MatRt 2013-03-18 05:32:17

+0

@ user1073122上面加了 – MeltingDog 2013-03-18 05:41:50

回答

0

這似乎是一個非常簡單的問題。您兩次申報insert_metka()。從其中一個提到的文件中刪除它。一旦它在保存文件中聲明,顯然你第二次試圖在eval()

0

Cannot redeclare insert_metka()的幫助下聲明它說你正在聲明一個函數兩次(可能與你的evals)。

你應該檢查你包含的文件。

要確保不包括一個以上的時間,你可以使用include_oncerequiere_once代替includerequiere

0

Accoring到document.parser.class.inc.php此行我猜你正在使用OOP

所以你可以做的是創建instantiation類以上class然後overwrite它。

還有其他的東西。你可能會在classdeclaring相同的功能。

1

看起來像一個糟糕的插件已損壞您的網站。禁用所有插件並將它們恢復一次,直到它再次破壞,然後您知道哪一個是罪魁禍首。

一旦你做完了,在這裏發佈插件代碼,我們可以幫助你進一步調試。您不需要修改MODX源代碼。

的問題很可能是由包裝這樣的insert_metka()聲明來解決:

if(!function_exists('insert_metka')) { 
    function insert_metka() { 
     // function code 
    } 
} 

http://wiki.modxcms.com/index.php/Creating_Snippets#Wrap_functions_inside_.21function_exists_conditional_if_the_resource_is_needed_to_run_more_than_once_on_a_page