2012-09-01 29 views
26

我的PHP升級到5.4.3(WAMP服務器2.2)在CakePHP的1.3製作,我的web應用程序後,顯示我的索引以下錯誤:類 對象重新定義已經定義的構造:如何消除php5嚴格的標準錯誤?

嚴格的標準在C:... \ cake \ cake \ libs \ object.php on line 63

嚴格標準:非靜態方法Configure :: getInstance()應該不會在C:...中被靜態調用... \ cake \ cake \ bootstrap.php on line 49

我發現有些人通過將php.ini中的error_reporting設置爲E_ALL & ~E_STRICT來解決此問題。

我在我的電腦上出現了php.ini文件(C:\ wamp \ bin \ php \ php5.4.3和C:\ wamp \ bin \ apache \ apache2.4.2 \ bin)解決問題。

我也嘗試把php_value error_reporting 6143放在C:... \ cake.htaccess中,但沒有成功。

有誰知道我該如何解決這個問題?因爲firebird我無法升級我的CakePHP。

+1

di d你也重啓apache呢?另外 - 通常對於WAMP,您可以通過單擊圖標並選擇PHP導航到正確的php.ini,然後選擇PHP => php.ini – mark

+1

您是否使用了<?php phpinfo(); ?>看看你是否修改了正確的'php.ini'? –

+0

在我的情況下,解決這些問題的方法是升級CakePHP,我不能這麼做,因爲CakePHP 2.x不支持firebird。我打印了phpinfo(),它顯示我的php.ini文件位於C:\ wamp \ bin \ apache \ apache2.4.2 \ bin。我沒有重新啓動Apache。不,在wamp菜單中打開的php.ini文件不是正確的。 – qxlab

回答

23

一個在PHP 5.4的變化是,現在E_STRICT是E_ALL

一部分,所以,在你/cake/bootstrap.php你可以從你的錯誤報告中刪除E_STRICT:

error_reporting(E_ALL^E_STRICT); 

並且與5.4版之前的版本再次兼容。

+6

謝謝!我把「error_reporting(E_ALL&〜E_STRICT&〜E_DEPRECATED);」在我的C:\ ... \ cake \ cake \ bootstrap.php文件中解決問題。使用這一個'error_reporting(E_ALL&〜E_STRICT&〜E_DEPRECATED)後' – qxlab

+1

;'我的意見已經消失...任何幫助? – vnpnlz

+0

我在bootstrap.php中應用了相同的東西,但在嚴格標準中沒有更改。 –

0

確保你已經更新了正確的php.ini文件 - 如果您在根目錄下創建一個PHP文件與下面的代碼

<?php 

phpinfo(); 

?> 

,並加載它在你的網頁瀏覽器,它會告訴你哪個ini文件正在使用,以防您錯過了一個。

htaccess文件也可能通過php_flag error_reporting值來設置該值,該值也可以按每個目錄設置。

+0

謝謝你的回答,phpinfo()表明我正在改變正確的php.ini文件。我不明白你對htaccess的評論...我應該嘗試一下嗎? – qxlab

8

請您的php.ini更換

error_reporting = E_ALL 

,與

error_reporting = E_ALL & ~E_STRICT 

對我來說,這是顯示在接受這個問題的答案

error_reporting(E_ALL^E_STRICT); 

沒有工作並給出了一個檢測到無限循環在JError錯誤爲我的Joomla網站。

+0

正如我在正確答案的評論中所述,爲了解決我的問題,我使用了'error_reporting(E_ALL&〜E_STRICT&〜E_DEPRECATED);',現在我不記得爲什麼了...... – qxlab

12

而不是修改蛋糕核心文件,如果你想更新你的蛋糕版本,這很糟糕,進入你的配置/核心。PHP文件並查找錯誤處理程序配置:

Configure::write('Error', array(
    'handler' => 'ErrorHandler::handleError', 
    'level' => E_ALL & ~E_DEPRECATED, 
    'trace' => true 
)); 

和替換 '等級' 與此:

... 
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED, 
... 
+1

這是最好的選擇 - 我的無論如何,'bootstrap.php'中的'error_reporting'被這些設置覆蓋。 – jocull

+0

對於CakePHP的用戶來說,這是正確的解決方案。因爲它在這裏被覆蓋,所以更改PHP.INI文件沒有任何作用。 – UncaAlby

4

您使用較新的PHP版本。在PHP 5.4,E_STRICT是蛋糕1.3 E_ALL

部分,打開文件/cake/bootstrap.php和改變這樣

error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED); 
1

的使用error_reporting如果你在蛋糕控制檯PHP嚴格警告戰鬥輸出,看看你的app/config/core.php

在CakePHP 1.3 error_reporting(...)'log'選項覆蓋,因此確保您排除E_STRICT這裏:從文件夾(根)蛋糕

if (!defined('E_ALL')) { 
    define('E_ALL', 8192); 
} 

文件debugger.php

/** 
* CakePHP Log Level: 
* 
* In case of Production Mode CakePHP gives you the possibility to continue logging errors. 
* 
* The following parameters can be used: 
* Boolean: Set true/false to activate/deactivate logging 
* Configure::write('log', true); 
* 
* Integer: Use built-in PHP constants to set the error level (see error_reporting) 
* Configure::write('log', E_ERROR | E_WARNING); 
* Configure::write('log', E_ALL^E_NOTICE); 
*/ 
Configure::write('log', E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE); 
0

文件的bootstrap.php從文件夾(根)蛋糕\庫存

error_reporting(E_ALL^~E_STRICT^~E_DEPRECATED);